Tanoda
MecanimAnimationClipEditor.cs
Go to the documentation of this file.
1using TriLibCore.Utils;
2using UnityEditor;
3using UnityEngine;
4
5namespace TriLibCore.Editor
6{
7 public class MecanimAnimationClipEditor : EditorWindow
8 {
9 private AnimationClip _animationClip;
10 private SerializedObject _serializedObject;
11 private SerializedProperty _animationClipSettings;
12
13 [MenuItem("Assets/Create/TriLib/MecanimAnimationClipTemplate")]
15 {
16 var editorWindow = (EditorWindow)GetWindow<MecanimAnimationClipEditor>();
17 editorWindow.Show();
18 }
19
20 private void Awake()
21 {
22 _animationClip = new AnimationClip();
23 _animationClip.name = "NewMecanimAnimationClipTemplate";
24 _serializedObject = new SerializedObject(_animationClip);
25 _animationClipSettings = _serializedObject.FindProperty("m_AnimationClipSettings");
26 }
27
28 private void OnDestroy()
29 {
30 if (!AssetDatabase.Contains(_animationClip))
31 {
32 DestroyImmediate(_animationClip);
33 }
34 }
35
36 private void OnGUI()
37 {
38 EditorGUILayout.PropertyField(_serializedObject.FindProperty("m_Name"));
39
40 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_StartTime"));
41 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_StopTime"));
42 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_OrientationOffsetY"));
43 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_Level"));
44 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_CycleOffset"));
45
46 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_LoopTime"));
47 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_LoopBlend"));
48 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_LoopBlendOrientation"));
49 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_LoopBlendPositionY"));
50 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_LoopBlendPositionXZ"));
51 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_KeepOriginalOrientation"));
52 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_KeepOriginalPositionY"));
53 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_KeepOriginalPositionXZ"));
54 EditorGUILayout.PropertyField(_animationClipSettings.FindPropertyRelative("m_HeightFromFeet"));
55
56 if (GUILayout.Button("Create Template with given Settings"))
57 {
58 AssetDatabase.CreateAsset(_animationClip, $"{AssetDatabase.GetAssetPath(Selection.activeObject)}/{FileUtils.SanitizePath(_animationClip.name)}.asset");
59 }
60 }
61 }
62}