示例#1
0
        ///Used when the Animated Parameter is a property and we don't have a SerializedProperty.
        public static void DoParameterField(string name, AnimatedParameter animParam, float time)
        {
            if (animParam == null)
            {
                GUILayout.Label("null parameter"); //this should never happen but it did
                return;
            }

            if (animParam.targetObject == null || animParam.targetObject.Equals(null))
            {
                GUILayout.Label("Target is Null");
                return;
            }

            if (!animParam.enabled)
            {
                GUILayout.Label(name);
                return;
            }

            try {
                var type         = animParam.animatedType;
                var animParamAtt = animParam.animatableAttribute;
                var value        = animParam.GetCurrentValueAsObject();
                var newValue     = value;

                EditorGUI.BeginChangeCheck();

                if (type == typeof(bool))
                {
                    name     = name == null ? "Value" : name;
                    newValue = EditorGUILayout.Toggle(name, (bool)value);
                }

                if (type == typeof(int))
                {
                    if (animParamAtt != null && animParamAtt.min != null && animParamAtt.max != null)
                    {
                        name = name == null ? string.Empty : name;
                        var min = animParamAtt.min.Value;
                        var max = animParamAtt.max.Value;
                        newValue = EditorGUILayout.IntSlider(name, (int)value, (int)min, (int)max);
                    }
                    else
                    {
                        name     = name == null ? "Value" : name;
                        newValue = EditorGUILayout.IntField(name, (int)value);
                    }
                }

                if (type == typeof(float))
                {
                    if (animParamAtt != null && animParamAtt.min != null && animParamAtt.max != null)
                    {
                        name = name == null ? string.Empty : name;
                        var min = animParamAtt.min.Value;
                        var max = animParamAtt.max.Value;
                        newValue = EditorGUILayout.Slider(name, (float)value, min, max);
                    }
                    else
                    {
                        name     = name == null ? "Value" : name;
                        newValue = EditorGUILayout.FloatField(name, (float)value);
                    }
                }

                if (type == typeof(Vector2))
                {
                    name     = name == null ? string.Empty : name;
                    newValue = EditorGUILayout.Vector2Field(name, (Vector2)value);
                }

                if (type == typeof(Vector3))
                {
                    name     = name == null ? string.Empty : name;
                    newValue = EditorGUILayout.Vector3Field(name, (Vector3)value);
                }

                if (type == typeof(Vector4))
                {
                    name     = name == null ? string.Empty : name;
                    newValue = EditorGUILayout.Vector4Field(name, (Vector4)value);
                }

                if (type == typeof(Quaternion))
                {
                    name = name == null ? string.Empty : name;
                    var q = (Quaternion)value;
                    var v = new Vector4(q.x, q.y, q.z, q.w);
                    v        = EditorGUILayout.Vector4Field(name, v);
                    newValue = new Quaternion(v.x, v.y, v.z, v.w);
                }

                if (type == typeof(Rect))
                {
                    name     = name == null ? string.Empty : name;
                    newValue = EditorGUILayout.RectField(name, (Rect)value);
                }

                if (type == typeof(Bounds))
                {
                    name     = name == null ? string.Empty : name;
                    newValue = EditorGUILayout.BoundsField(name, (Bounds)value);
                }

                if (type == typeof(Color))
                {
                    name = name == null ? string.Empty : name;
                    GUI.backgroundColor = Color.white; //to avoid tinting
#if UNITY_2018_3_OR_NEWER
                    newValue = EditorGUILayout.ColorField(new GUIContent(name), (Color)value);
#else
                    newValue = EditorGUILayout.ColorField(new GUIContent(name), (Color)value, true, true, true, new ColorPickerHDRConfig(0f, float.MaxValue, 0f, float.MaxValue));
#endif
                }

                if (EditorGUI.EndChangeCheck() && newValue != value)
                {
                    animParam.SetCurrentValue(newValue);
                    if (Prefs.autoKey || (animParam.isExternal && !animParam.HasAnyKey()))
                    {
                        animParam.TryAutoKey(time);
                    }
                }
            }

            catch (System.Exception exc) {
                GUILayout.Label(string.Format("<color=#f25c5c>{0}</color> (<size=8>{1}</size>)", name, exc.Message));
            }
        }