实现如图效果,找了不少地方,终于找到了一个伟大的贡献者,现转一波 http://www.xshadow.org/index.php/archives/63
转自http://www.xshadow.org/index.php/archives/63
转自http://www.xshadow.org/index.php/archives/63
转自http://www.xshadow.org/index.php/archives/63
目的是为了达到图中效果。这样的好处是AnimationClip便是相对引用。在复制AnimatorController的时候,不用重新把所有的AnimationClip再关联一遍。
代码如下,由于AnimationClip在作为子节点的时候无法通过原方法进行重命名和删除。所以除了创建动画文件的功能外,还加入了重命名和删除的功能。
public class AnimationHelper : EditorWindow { private enum WindowsType { Create, Rename } private static WindowsType k_WindowsType; [MenuItem("Assets/Animation/CreateSubAnimationClip")] private static void CreateSubAnimationClip() { k_WindowsType = WindowsType.Create; Rect wr = new Rect(0, 0, 300, 148); AnimationHelper window = (AnimationHelper)EditorWindow.GetWindowWithRect(typeof(AnimationHelper), wr, true, "CreateSubAnimationClip"); Object[] objs = Selection.objects; if (objs.Length == 1 && objs[0] is RuntimeAnimatorController) window.m_Controller = (RuntimeAnimatorController)objs[0]; window.Show(); } [MenuItem("Assets/Animation/RenameSubAnimationClip")] private static void RenameSubAnimationClip() { k_WindowsType = WindowsType.Rename; Rect wr = new Rect(0, 0, 300, 148); AnimationHelper window = (AnimationHelper)EditorWindow.GetWindowWithRect(typeof(AnimationHelper), wr, true, "RenameSubAnimationClip"); Object[] objs = Selection.objects; if (objs.Length == 1 && objs[0] is AnimationClip) { window.m_Clip = (AnimationClip)objs[0]; window.m_AnimClipName = objs[0].name; } window.Show(); } [MenuItem("Assets/Animation/DeleteSubAnimationClip")] private static void DeleteSubAnimationClip() { Object[] objs = Selection.objects; if (objs.Length == 1 && objs[0] is AnimationClip) { GameObject.DestroyImmediate(objs[0], true); AssetDatabase.SaveAssets(); } } private string m_AnimClipName; private RuntimeAnimatorController m_Controller; private AnimationClip m_Clip; private void OnGUI() { switch (k_WindowsType) { case WindowsType.Create: m_Controller = EditorGUILayout.ObjectField("Animator Controller", m_Controller, typeof(RuntimeAnimatorController), true) as RuntimeAnimatorController; m_AnimClipName = EditorGUILayout.TextField("Animation Clip Name", m_AnimClipName); if (GUILayout.Button("Create", GUILayout.Height(35))) { AnimationClip animationClip = new AnimationClip(); animationClip.name = m_AnimClipName; AssetDatabase.AddObjectToAsset(animationClip, m_Controller); AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(animationClip)); } break; case WindowsType.Rename: m_Clip = EditorGUILayout.ObjectField("Animator Clip", m_Clip, typeof(AnimationClip), true) as AnimationClip; m_AnimClipName = EditorGUILayout.TextField("Animation Clip Name", m_AnimClipName); if (GUILayout.Button("Rename", GUILayout.Height(35))) { m_Clip.name = m_AnimClipName; AssetDatabase.SaveAssets(); } break; } } }
暂无关于此日志的评论。