using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ChivaXR;
using Sirenix.OdinInspector;
using System.Linq;
using System.Text.RegularExpressions;
using UnityEngine.Events;
using ChivaXR.Op;
using System;
using QFramework;
#if UNITY_EDITOR
using UnityEditor;
using System.Text;
using UniRx;
using Valve.VR.InteractionSystem;
using UniRx.Triggers;
[Serializable]
public class AniDataEditorContainer
{
[Sirenix.OdinInspector.ReadOnly]
[HorizontalGroup("动画名称", Order = 1)]
[HideLabel]
public string AniName;
#if UNITY_EDITOR
[HorizontalGroup("快捷指令", Order = 2)]
[Button("更新模型")]
[GUIColor("RelatColor")]
[PropertyOrder(2)]
///
/// 更新当前Scene选择物体到出发对象
///
public void ReplaceSelectionObjToRelat()
{
if (Selection.activeGameObject != null)
{
relatGameObjects.Clear();
relatGameObjects.AddRange(Selection.gameObjects);
}
}
#endif
[HorizontalGroup("触发物体列表")]
[GUIColor("RelatColor")]
[PropertyOrder(3)]
[ListDrawerSettings()]
[LabelText("$relatInfo")]
public List relatGameObjects = new List();
public string relatInfo
{
get
{
if (relatGameObjects.Count == 1)
{
return "已指定模型:" + relatGameObjects[0].name;
}
else if (relatGameObjects.Count > 1)
{
return "已指定模型:" + relatGameObjects[0].name + "/" + relatGameObjects[1].name + "等多个物体";
}
else
{
return "未指定物体";
}
}
}
#if UNITY_EDITOR
///
/// 更新当前Scene选择物体到出发对象
///
public void SelectRelatObj()
{
Selection.objects = relatGameObjects.ToArray();
SceneView.lastActiveSceneView.FrameSelected();
}
#endif
private Color RelatColor()
{
if (relatGameObjects.Count != 0)
{
return new Color(0.7f, 1f, 0.7f);
}
return GUI.color;
}
[HideInInspector]
///
/// 观察视角坐标
///
public Vector3 ViewPoint;
[HideInInspector]
///
/// 观察视角角度
///
public Vector3 ViewEuler;
[HideInTables]
public AniDataContainer AniDataContainer;
public AniDataEditorContainer(AniDataContainer data)
{
AniName = data.AniDataName;
AniDataContainer = data;
}
[TableColumnWidth(60)]
[HorizontalGroup("动画状态", Order = 4)]
[Button("初始状态")]
[GUIColor("InitStateColor")]
public void SetInitState()
{
if (AniDataContainer.aniData)
{
AniDataContainer.aniData.SetInitState();
}
}
[ShowInInspector]
[HideLabel]
[HorizontalGroup("动画状态")]
public AniData GetAniData
{
get { return AniDataContainer.aniData; }
}
[TableColumnWidth(60)]
[HorizontalGroup("动画状态")]
[Button("结束状态")]
[GUIColor("FinishedStateColor")]
public void SetFinishedState()
{
if (AniDataContainer.aniData)
{
AniDataContainer.aniData.SetFinishedState();
}
}
private Color FinishedStateColor()
{
switch (AniDataContainer.aniData.currentAniState)
{
case Animation_State.finishedState:
return new Color(0.7f, 1f, 0.7f);
}
return GUI.color;
}
private Color InitStateColor()
{
if (AniDataContainer.aniData != null)
{
switch (AniDataContainer.aniData.currentAniState)
{
case Animation_State.initState:
return new Color(0.7f, 1f, 0.7f);
}
}
return GUI.color;
}
}
[ExecuteInEditMode]
public class AnimationDataEditor : SerializedMonoSingleton
{
#region 动画流程创建
[TabGroup("TapGroup", "动画流程创建")]
[LabelText("动画流程列表")]
[TableList(MaxScrollViewHeight = 300, ShowPaging = true, NumberOfItemsPerPage = 10, AlwaysExpanded = true/*, IsReadOnly = true*/)]
public List animationEditorDatas = new List();
[HideInInspector]
public string operationDataName;
[ValidateInput("NewAniDataNameStandard", "$AddAniDataNameErrorInfo")]
[FoldoutGroup("TapGroup/动画流程创建/创建动画", Order = -1)]
[LabelText("新建动画名称(支持多行名称创建)")]
[MultiLineProperty(10)]
public string m_AddAnimationDataNames;
public bool NewAniDataNameStandard
{
get
{
if (m_AddAnimationDataNames.IsNullOrEmpty()) return false;
if (AnimationManager.Instance.aniDatasDic.ContainsKey(m_AddAnimationDataNames)) return false;
if (m_AddAnimationDataNames.Split('\n').Length >= 2)
{
string[] AniDataNames = m_AddAnimationDataNames.Split('\n');
foreach (var item in AniDataNames)
{
if (AnimationManager.Instance.aniDatasDic.ContainsKey(item))
{
return false;
}
//if (AniDataNames.Where(s => s == item).Count() >= 2)
//{
// return false;
//}
}
}
return true;
}
}
public string AddAniDataNameErrorInfo
{
get
{
if (m_AddAnimationDataNames.IsNullOrEmpty()) return "注册动画名称不能为空";
if (AnimationManager.Instance.aniDatasDic.ContainsKey(m_AddAnimationDataNames)) return m_AddAnimationDataNames + "已注册";
if (m_AddAnimationDataNames.Split('\n').Length >= 2)
{
foreach (var item in m_AddAnimationDataNames.Split('\n'))
{
string[] AniDataNames = m_AddAnimationDataNames.Split('\n');
if (AnimationManager.Instance.aniDatasDic.ContainsKey(item))
{
return item + "已注册";
}
//if (AniDataNames.Where(s => s == item).Count() >= 2)
//{
// return "当前添加动画名称内" + item + "重复";
//}
}
}
return "";
}
}
[PropertySpace(10, 10)]
[FoldoutGroup("TapGroup/动画流程创建/创建动画/辅助工具", Order = 1)]
[FoldoutGroup("TapGroup/动画流程创建/创建动画/辅助工具/RefrushAniIndex", GroupName = "按照当前列表刷新新增动画名称序号", Order = 1)]
[Button("刷新待创建动画名称序号")]
public void RefrushAniDataIndex()
{
string[] AniDataNames = m_AddAnimationDataNames.Split('\n');
StringBuilder stringBuilder = new StringBuilder();
int startIndex = animationEditorDatas.Count;
for (int i = 0; i < AniDataNames.Length; i++)
{
stringBuilder.Append((startIndex + i + 1).ToString("000") + "_" + AniDataNames[i]);
if (i < AniDataNames.Length - 1)
{
stringBuilder.AppendLine();
}
}
m_AddAnimationDataNames = stringBuilder.ToString();
}
[FoldoutGroup("TapGroup/动画流程创建/创建动画/辅助工具/ImportAni", GroupName = "导入动画(基于AnimationManager)", Order = 2)]
[LabelText("动画导入(基于AnimationManager已注册AniData)")]
[ShowInInspector]
[ValueDropdown("GetAllOperationDataNames", IsUniqueList = true)]
public string OperationDataName
{
get { return operationDataName; }
set
{
if (operationDataName != value)
{
operationDataName = value;
}
}
}
private static IEnumerable GetAllOperationDataNames()
{
return AnimationManager.Instance.animationDatas.Select(s => new ValueDropdownItem(s.AniDataName, s.AniDataName));
}
[FoldoutGroup("TapGroup/动画流程创建/创建动画/辅助工具/ImportAni", Order = 1)]
[Button("导入")]
public void AddSelectOperationData()
{
if (operationDataName == "") { return; }
AniDataContainer tmpAniDataContainer =
AnimationManager.Instance.animationDatas.Where(s => s.AniDataName == operationDataName).First();
if (tmpAniDataContainer != null)
{
animationEditorDatas.Add(new AniDataEditorContainer(tmpAniDataContainer));
}
}
[HideInInspector]
public string aniDataSelectReName;
[FoldoutGroup("TapGroup/动画流程创建/创建动画/辅助工具/ReName", GroupName = "动画重命名", Order = 3)]
[LabelText("选择动画")]
[ShowInInspector]
[ValueDropdown("GetAniDataEditorAniDataNames", IsUniqueList = true)]
public string AniDataSelectReName
{
get { return aniDataSelectReName; }
set
{
if (aniDataSelectReName != value)
{
aniDataSelectReName = value;
}
}
}
private static IEnumerable GetAniDataEditorAniDataNames()
{
return AnimationDataEditor.Instance.animationEditorDatas.Select(s => new ValueDropdownItem(s.AniName, s.AniName));
}
[FoldoutGroup("TapGroup/动画流程创建/创建动画/辅助工具/ReName", GroupName = "动画重命名", Order = 5)]
[LabelText("重命名称")]
public string m_AniDataReName;
[FoldoutGroup("TapGroup/动画流程创建/创建动画/辅助工具/ReName", GroupName = "动画重命名", Order = 4)]
[Button("重命名")]
[GUIColor("ReNameBtnColor")]
[EnableIf("ReNameAniDataStandard")]
public void AniDataReName()
{
AniDataEditorContainer reNameAniDataEditorContainer = animationEditorDatas.Where(s => s.AniName == aniDataSelectReName).First();
AnimationManager.Instance.AniDataReName(reNameAniDataEditorContainer.AniDataContainer, m_AniDataReName);
reNameAniDataEditorContainer.AniDataContainer.aniData.gameObject.name = m_AniDataReName;
reNameAniDataEditorContainer.AniName = m_AniDataReName;
}
public bool ReNameAniDataStandard
{
get
{
if (m_AniDataReName.IsNullOrEmpty()) return false;
if (AnimationManager.Instance.aniDatasDic.ContainsKey(m_AniDataReName)) return false;
return true;
}
}
///
/// 重命名按钮准许颜色
///
///
private Color ReNameBtnColor()
{
if (ReNameAniDataStandard)
{
return new Color(0.7f, 1f, 0.7f);
}
return GUI.color;
}
[FoldoutGroup("TapGroup/动画流程创建/模型快捷操作", GroupName = "模型快捷操作", Order = -2)]
[HorizontalGroup("TapGroup/动画流程创建/模型快捷操作/模型处理")]
[Button("所选物体合并")]
public void SelectObjsCombine()
{
GameObject combineObjsParent = new GameObject();
combineObjsParent.transform.parent = Selection.activeGameObject.transform.parent;
combineObjsParent.transform.position = Selection.activeGameObject.transform.position;
for (int i = 0; i < Selection.gameObjects.Length; i++)
{
Selection.gameObjects[i].transform.parent = combineObjsParent.transform;
}
combineObjsParent.transform.SetAsFirstSibling();
Selection.activeGameObject = combineObjsParent;
}
[FoldoutGroup("TapGroup/动画流程创建/模型快捷操作", GroupName = "模型快捷操作", Order = -2)]
[HorizontalGroup("TapGroup/动画流程创建/模型快捷操作/模型处理")]
[Button("重置所选物体父级坐标与所选物体一致")]
public void ReSetParentPos()
{
Transform reSetParent = Selection.activeGameObject.transform.parent;
List childObjs = new List();
for (int i = 0; i < reSetParent.childCount; i++)
{
childObjs.Add(reSetParent.GetChild(i).transform);
}
for (int i = 0; i < childObjs.Count; i++)
{
childObjs[i].transform.parent = null;
}
reSetParent.transform.position = Selection.activeGameObject.transform.position;
for (int i = 0; i < childObjs.Count; i++)
{
childObjs[i].transform.parent = reSetParent;
}
childObjs.Clear();
}
[FoldoutGroup("TapGroup/动画流程创建/创建动画")]
[Button("创建动画")]
[EnableIf("NewAniDataNameStandard")]
public void CreateNewAniData()
{
string[] AniDataNames = m_AddAnimationDataNames.Split('\n');
AniDataNames = CheckAniDataNames(AniDataNames);
for (int i = 0; i < AniDataNames.Length; i++)
{
if (String.IsNullOrEmpty(AniDataNames[i])) break;
AniData newAniData = new GameObject(AniDataNames[i]).AddComponent();
newAniData.aniName = AniDataNames[i];
newAniData.aniDescriptioin = AniDataNames[i];
newAniData.RegisterData();
newAniData.transform.parent = AnimationManager.Instance.transform;
newAniData.transform.SetAsLastSibling();
AniDataContainer tmpAniDataContainer =
AnimationManager.Instance.animationDatas.Where(s => s.AniDataName == AniDataNames[i]).First();
if (tmpAniDataContainer != null)
{
animationEditorDatas.Add(new AniDataEditorContainer(tmpAniDataContainer));
}
}
m_AddAnimationDataNames = "";
}
///
/// 检查内部重复名称
///
///
private string[] CheckAniDataNames(string[] AniDataNames)
{
foreach (var item in AniDataNames)
{
List tmpNames = AniDataNames.ToList().FindAll(name => name == item);
if (tmpNames.Count >= 2)
{
for (int i = 0; i < tmpNames.Count; i++)
{
AniDataNames[AniDataNames.ToList().IndexOf(tmpNames[i])] = tmpNames[i] + (i + 1);
}
}
}
return AniDataNames;
}
#endregion
#region 动画编辑
[BoxGroup("流程控制", CenterLabel = true, Order = -1)]
[HorizontalGroup("流程控制/JumpAni", Order = -1)]
[LabelText("跳步名称(编辑器跳步使用)")]
[ValueDropdown("GetProcessAniDataNames")]
public string jumpTargetAnimation;
private IEnumerable GetProcessAniDataNames()
{
return animationEditorDatas.Select(s => new ValueDropdownItem(s.AniName, s.AniName));
}
[HorizontalGroup("流程控制/JumpAni", Order = -1)]
[Button("跳转到对应动画")]
public void JumpToTargetAnimation()
{
JumpProcess(jumpTargetAnimation);
}
[Title("流程控制/JumpState/当前动画", TitleAlignment = TitleAlignments.Centered, Title = "$m_title")]
[BoxGroup("流程控制")]
[Button("初始化动画组")]
///
///初始化步骤状态
///
public void InitStepState()
{
for (int i = currentStepID; i <= animationEditorDatas.Count - 1; i++)
{
SetAniDataState(animationEditorDatas[i].AniName, Animation_State.finishedState);
}
for (int i = animationEditorDatas.Count - 1; i >= 0; i--)
{
SetAniDataState(animationEditorDatas[i].AniName, Animation_State.initState);
}
Debug.Log("初始化跳转至第一步");
currentStepID = 1;
RefreshAniData();
}
[HorizontalGroup("流程控制/JumpState")]
[Button("上一步")]
[PropertySpace(0, 10)]
public void PreProcess()
{
JumpProcess(currentStepID - 1);
}
[HorizontalGroup("流程控制/JumpState")]
[Button("下一步")]
[PropertySpace(0, 10)]
public void EnterNextProcess()
{
JumpProcess(currentStepID + 1);
}
public string m_title
{
get
{
if (animationEditorDatas.Count == 0)
{
return "暂无动画";
}
return "第" + currentStepID + "步:" + aniName;
}
}
[HideInInspector]
public AniData m_CurrentAniData;
[HideInInspector]
public string aniName;
[HideInInspector]
///
/// 当前步骤(从1开始)
///
public int currentStepID = 1;
[InfoBox("$AnimationDriversDescription", InfoMessageType.None)]
[FoldoutGroup("动画快捷添加", Order = 2)]
[HorizontalGroup("动画快捷添加/selectObjs")]
[Button("选中当前步骤指定物体")]
public void SelectCurrentAniEditorDataReleatObjs()
{
animationEditorDatas[CurrentListID].SelectRelatObj();
}
[FoldoutGroup("动画快捷添加", Order = 2)]
[HorizontalGroup("动画快捷添加/activeGroup")]
[Button("所选物体显示")]
[GUIColor("SelectColor")]
public void CreateSelectionObjsActiveAniDriver()
{
if (m_CurrentAniData != null)
{
AniDriver_ActiveObjs tmpAniDriver = new AniDriver_ActiveObjs();
m_CurrentAniData.AnimationDriverDatas.Add(tmpAniDriver);
tmpAniDriver.objs.AddRange(Selection.gameObjects);
tmpAniDriver.activeObjs = true;
}
}
[FoldoutGroup("动画快捷添加")]
[HorizontalGroup("动画快捷添加/activeGroup")]
[Button("所选物体隐藏")]
[GUIColor("SelectColor")]
public void CreateSelectionObjsDisActiveAniDriver()
{
if (m_CurrentAniData != null)
{
AniDriver_ActiveObjs tmpAniDriver = new AniDriver_ActiveObjs();
m_CurrentAniData.AnimationDriverDatas.Add(tmpAniDriver);
tmpAniDriver.objs.AddRange(Selection.gameObjects);
tmpAniDriver.activeObjs = false;
}
}
[FoldoutGroup("动画快捷添加")]
[HorizontalGroup("动画快捷添加/moveGroup")]
[Button("所选物体路径动画")]
[GUIColor("SelectColor")]
public void CreateSelectionObjsMovePathAniDriver()
{
if (m_CurrentAniData != null)
{
AniDriver_MoveByPathItem tmpAniDriver = new AniDriver_MoveByPathItem();
m_CurrentAniData.AnimationDriverDatas.Add(tmpAniDriver);
Transform movePathGroup = m_CurrentAniData.transform.Find("MovePathGroup");
if (movePathGroup == null)
{
movePathGroup = new GameObject("MovePathGroup").transform;
movePathGroup.parent = m_CurrentAniData.transform;
movePathGroup.transform.localPosition = Vector3.zero;
movePathGroup.transform.localRotation = Quaternion.identity;
movePathGroup.transform.localScale = Vector3.one;
}
tmpAniDriver.mMovePathItem = new GameObject(Selection.activeGameObject.name + "_MovePath").AddComponent();
tmpAniDriver.mMovePathItem.transform.parent = movePathGroup;
tmpAniDriver.mMovePathItem.transform.localPosition = Vector3.zero;
tmpAniDriver.mMovePathItem.transform.localRotation = Quaternion.identity;
tmpAniDriver.mMovePathItem.moveTarget = Selection.activeGameObject;
tmpAniDriver.animationSequence = AnimationSequence.waitFinished;
tmpAniDriver.mMovePathItem.AddMovePath();
Selection.activeGameObject = tmpAniDriver.mMovePathItem.gameObject;
}
}
[FoldoutGroup("动画快捷添加")]
[HorizontalGroup("动画快捷添加/moveGroup")]
[Button("所选物体简易动画")]
[GUIColor("SelectColor")]
public void CreateSelectionObjsSimpleMoveAniDriver()
{
if (m_CurrentAniData != null)
{
AniDriver_SimpleMoveRot tmpAniDriver = new AniDriver_SimpleMoveRot();
m_CurrentAniData.AnimationDriverDatas.Add(tmpAniDriver);
Transform simpleMoveGroup = m_CurrentAniData.transform.Find("SimpleMoveGroup");
if (simpleMoveGroup == null)
{
simpleMoveGroup = new GameObject("SimpleMoveGroup").transform;
simpleMoveGroup.parent = m_CurrentAniData.transform;
simpleMoveGroup.transform.localPosition = Vector3.zero;
simpleMoveGroup.transform.localRotation = Quaternion.identity;
simpleMoveGroup.transform.localScale = Vector3.one;
}
tmpAniDriver.mSimpleMoveItem = new GameObject(Selection.activeGameObject.name + "_SimpleMove").AddComponent();
tmpAniDriver.mSimpleMoveItem.transform.parent = simpleMoveGroup;
tmpAniDriver.mSimpleMoveItem.transform.localPosition = Vector3.zero;
tmpAniDriver.mSimpleMoveItem.transform.localRotation = Quaternion.identity;
tmpAniDriver.animationSequence = AnimationSequence.waitFinished;
tmpAniDriver.mSimpleMoveItem.AddSelectObj();
Selection.activeGameObject = tmpAniDriver.mSimpleMoveItem.gameObject;
}
}
[FoldoutGroup("动画快捷添加")]
[HorizontalGroup("动画快捷添加/moveGroup")]
[Button("所选物体工具动画")]
[GUIColor("SelectColor")]
public void CreateSelectionObjToolAnimationAniDriver()
{
if (m_CurrentAniData != null)
{
AniDriver_ToolAnimationItem tmpAniDriver = new AniDriver_ToolAnimationItem();
m_CurrentAniData.AnimationDriverDatas.Add(tmpAniDriver);
Transform ToolAnimationGroup = m_CurrentAniData.transform.Find("ToolAnimationGroup");
if (ToolAnimationGroup == null)
{
ToolAnimationGroup = new GameObject("ToolAnimationGroup").transform;
ToolAnimationGroup.parent = m_CurrentAniData.transform;
ToolAnimationGroup.transform.localPosition = Vector3.zero;
ToolAnimationGroup.transform.localRotation = Quaternion.identity;
ToolAnimationGroup.transform.localScale = Vector3.one;
}
tmpAniDriver.mToolAnimationItem = new GameObject(Selection.activeGameObject.name + "_ToolAnimation").AddComponent();
tmpAniDriver.mToolAnimationItem.transform.parent = ToolAnimationGroup;
tmpAniDriver.mToolAnimationItem.transform.localPosition = Vector3.zero;
tmpAniDriver.mToolAnimationItem.transform.localRotation = Quaternion.identity;
tmpAniDriver.animationSequence = AnimationSequence.waitFinished;
tmpAniDriver.mToolAnimationItem.AddSelectObj();
Selection.activeGameObject = tmpAniDriver.mToolAnimationItem.gameObject;
}
}
[TabGroup("TapGroup", "当前动画编辑")]
[LabelText("动画配置表")]
[TypeFilter("GetFilteredTypeList")]
[ListDrawerSettings(Expanded = true)]
public List AnimationDriverDatas;
public IEnumerable GetFilteredTypeList()
{
var q = typeof(AnimationDriverBase).Assembly.GetTypes()
.Where(x => !x.IsAbstract)
.Where(x => !x.IsGenericTypeDefinition)
.Where(x => typeof(AnimationDriverBase).IsAssignableFrom(x));
return q;
}
public string AnimationDriversDescription
{
get
{
if (AnimationDriverDatas == null || AnimationDriverDatas.Count == 0) return "暂无动画";
StringBuilder sb = new StringBuilder();
sb.AppendLine(m_title + "当前步骤动画描述:");
for (var i = 0; i < AnimationDriverDatas.Count; i++)
{
sb.AppendLine((i + 1) + "--" + AnimationDriverDatas[i].AnimationDescription());
}
return sb.ToString();
}
}
private Color SelectColor()
{
return new Color(0.7f, 1f, 0.7f);
}
#endregion
#region AnimationStateController
///
/// 状态跳转
///
///
public void SetAniDataState(string aniDataName, Animation_State aniState)
{
if (animationEditorDatas.Where(s => s.AniName == aniDataName).Count() > 0)
{
AniDataEditorContainer tempAniDataEditor = animationEditorDatas.Where(s => s.AniName == aniDataName).First();
switch (aniState)
{
case Animation_State.initState:
tempAniDataEditor.SetInitState();
break;
case Animation_State.finishedState:
tempAniDataEditor.SetFinishedState();
break;
}
}
else
{
Debug.LogError("无该动画片段--->" + aniDataName);
}
}
///
/// 当前步骤在List中的索引(从0开始)
///
public int CurrentListID
{
get
{
if ((currentStepID - 1) >= 0 && ((currentStepID - 1) < CurrentListsCount))
{
return currentStepID - 1;
}
Debug.LogError("当前步骤超出List范围");
return 0;
}
}
///
/// 当前List步骤数量
///
public int CurrentListsCount
{
get
{
return animationEditorDatas.Count;
}
}
///
/// 刷新当前播放信息
///
private void RefreshAniData()
{
m_CurrentAniData = animationEditorDatas[currentStepID - 1].AniDataContainer.aniData;
AnimationDriverDatas = m_CurrentAniData.AnimationDriverDatas;
aniName = m_CurrentAniData.aniName;
}
///
/// 跳步
///
public void JumpProcess(int targetStepID)
{
//步骤错误
if (targetStepID < 1 || targetStepID > CurrentListsCount)
{
Debug.LogError("流程跳转:无目标步骤");
return;
}
if (targetStepID == currentStepID)
{
SetAniDataState(animationEditorDatas[CurrentListID].AniName, Animation_State.initState);
}
//向前跳步
else if (targetStepID < currentStepID)
{
for (int i = currentStepID - 1; i >= targetStepID - 1; i--)
{
SetAniDataState(animationEditorDatas[i].AniName, Animation_State.initState);
}
}
//向后跳步
else
{
for (int i = currentStepID - 1; i <= targetStepID - 1; i++)
{
if (i.Equals(targetStepID - 1))
{
SetAniDataState(animationEditorDatas[i].AniName, Animation_State.initState);
}
else
{
SetAniDataState(animationEditorDatas[i].AniName, Animation_State.finishedState);
}
}
}
currentStepID = targetStepID;
RefreshAniData();
}
///
/// 跳步
///
/// 目标步骤ID
/// 是否在编辑器状态下
/// 是否执行当前步骤
public void JumpProcess(string aniName)
{
int targetStepID = 0;
if (animationEditorDatas.Where(s => s.AniName == aniName).Count() > 0)
{
AniDataEditorContainer tempAniData = animationEditorDatas.Where(s => s.AniName == aniName).First();
targetStepID = animationEditorDatas.IndexOf(tempAniData) + 1;
}
else
{
return;
}
//步骤错误
if (targetStepID < 1 || targetStepID > CurrentListsCount)
{
Debug.LogError("流程跳转:无目标步骤");
return;
}
if (targetStepID == currentStepID)
{
SetAniDataState(animationEditorDatas[CurrentListID].AniName, Animation_State.initState);
}
//向前跳步
else if (targetStepID < currentStepID)
{
for (int i = currentStepID - 1; i >= targetStepID - 1; i--)
{
SetAniDataState(animationEditorDatas[i].AniName, Animation_State.initState);
}
}
//向后跳步
else
{
for (int i = currentStepID - 1; i <= targetStepID - 1; i++)
{
if (i.Equals(targetStepID - 1))
{
SetAniDataState(animationEditorDatas[i].AniName, Animation_State.initState);
}
else
{
SetAniDataState(animationEditorDatas[i].AniName, Animation_State.finishedState);
}
}
}
currentStepID = targetStepID;
RefreshAniData();
}
///
/// Editor模式下当前选中物体列表
///
[Title("辅助参数")]
[ListDrawerSettings(IsReadOnly = true, Expanded = true)]
[LabelText("Scene场景当前选中物体列表")]
[PropertyOrder(3)]
public List selection = new List();
private void OnEnable()
{
Selection.selectionChanged += EditorSelectionChanged;
}
private void OnDisable()
{
Selection.selectionChanged -= EditorSelectionChanged;
}
void EditorSelectionChanged()
{
selection.Clear();
selection.AddRange(Selection.gameObjects);
}
#endregion
}
#endif