コード例 #1
0
ファイル: SpriteAnimationEditor.cs プロジェクト: ChubbRck/SFB
        public override void OnInspectorGUI()
        {
            sp = target as SpriteAnimation;

            var serializedObject = new UnityEditor.SerializedObject(sp);

            serializedObject.Update();

            CacheAnimationNames ();

            var spAutoStart = serializedObject.FindProperty ("autoStart");
            var spMode = serializedObject.FindProperty ("mode");
            var spAssets = serializedObject.FindProperty ("assets");
            var spSpeedRatio = serializedObject.FindProperty ("speedRatio");

            EditorGUILayout.PropertyField (spAutoStart);
            EditorGUILayout.PropertyField (spSpeedRatio, new GUIContent("Speed Ratio: ")  );
            EditorGUILayout.PropertyField (spMode);

            EditorGUI.BeginChangeCheck();
            EditorGUILayout.PropertyField(spAssets, true);
            if (EditorGUI.EndChangeCheck())
            {
                serializedObject.ApplyModifiedProperties ();
                cachedAnimationNames = false;
                CacheAnimationNames();

                int newIdx = GetSelectedAnimationIdx();
                if (newIdx == -1)
                {
                    SetCurrentAnimation(string.Empty);
                }
            }
            selectedAnimationIdx = sp.currentAnimationIdx+1; //GetSelectedAnimationIdx();

            int lastAnimIdx = selectedAnimationIdx;
            selectedAnimationIdx = EditorGUILayout.Popup ("Selected Animation: ", selectedAnimationIdx, animationNames.ToArray ());
            if (selectedAnimationIdx != lastAnimIdx)
            {
                serializedObject.ApplyModifiedProperties ();
                //SetSelectedAnimation();
                //sp.Play(selectedAnimationIdx-1);
                changedAnim = true;
                changedAnimIdx = selectedAnimationIdx;
            }
            if (sp.currentAnimationName != null)
                EditorGUILayout.PropertyField ( serializedObject.FindProperty("playFrom"), new GUIContent("Play from keyframe: ")  );

            // draw list
            GUILayout.Space (20);
            SerializedProperty animList = serializedObject.FindProperty ("list");
            float nameSize = 140;
            if (animList.arraySize>0)
            {
                GUILayoutOption[] options = new GUILayoutOption[2];
                options[0] = GUILayout.MaxWidth(265);
                options[1] = GUILayout.MinWidth(265);
                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                Rect itemRect = GUILayoutUtility.GetRect(200,18, options);
                GUILayout.FlexibleSpace();
                GUILayout.EndHorizontal();
                GUI.Box(itemRect, new GUIContent(string.Empty));
                itemRect.width = nameSize;
                EditorGUI.LabelField(itemRect, "Animation Name");
                itemRect.xMin = itemRect.xMax;
                itemRect.width = 45;
                EditorGUI.LabelField(itemRect, "Index");

                for (int i = 0; i < animList.arraySize; i++)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    itemRect = GUILayoutUtility.GetRect(200,18, options);
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();
                    itemRect.width = nameSize;
                    GUI.Box(itemRect, new GUIContent(string.Empty));
                    SerializedProperty item = animList.GetArrayElementAtIndex(i);
                    EditorGUI.LabelField(itemRect, item.FindPropertyRelative("animationName").stringValue);
                    itemRect.xMin = itemRect.xMax;
                    itemRect.width = 45;
                    GUI.Box(itemRect, new GUIContent(string.Empty));
                    EditorGUI.LabelField(itemRect, i.ToString());
                    itemRect.xMin = itemRect.xMax;
                    itemRect.width = 30;
                    if (i>0 && GUI.Button(itemRect, "Up"))
                    {
                        animList.MoveArrayElement(i, i-1);
                        if (sp.currentAnimationIdx == i)
                            serializedObject.FindProperty("animIdx").intValue--;
                        else if (sp.currentAnimationIdx == i-1)
                            serializedObject.FindProperty("animIdx").intValue++;
                        serializedObject.ApplyModifiedProperties();
                        return;
                    }
                    itemRect.xMin = itemRect.xMax;
                    itemRect.width = 50;
                    if (i<animList.arraySize-1 && GUI.Button(itemRect, "Down"))
                    {
                        animList.MoveArrayElement(i, i+1);
                        if (sp.currentAnimationIdx == i)
                            serializedObject.FindProperty("animIdx").intValue++;
                        else if (sp.currentAnimationIdx == i+1)
                            serializedObject.FindProperty("animIdx").intValue--;
                        serializedObject.ApplyModifiedProperties();
                        return;
                    }
                }
            }
            if (Event.current.type == EventType.Repaint &&  changedAnim)
            {
                changedAnim = false;
                sp.SetCurrentAnimation (changedAnimIdx-1);
                //sp.Play(changedAnimIdx-1);
            }
            if (GUI.changed)
                serializedObject.ApplyModifiedProperties ();
        }