void Start()
    {
        if (!Application.isPlaying)
        {
            if (bezierPoints.Count > 0 && bezierPoints[0] == null)
            {
                bezierPoints.Clear();
                foreach (MUIBezierPoint point in gameObject.GetComponents <MUIBezierPoint>())
                {
                    bezierPoints.Add(point);
                }
                return;
            }

            MUIBezierPoint[] pts = gameObject.GetComponents <MUIBezierPoint>();
            foreach (MUIBezierPoint point in pts)
            {
                DestroyImmediate(point);
            }
            foreach (MUIBezierPoint point in bezierPoints)
            {
                MUIBezierPoint p = gameObject.AddComponent <MUIBezierPoint>();
                p.Copy(point);
            }
            return;
        }
    }
 public void Copy(MUIBezierPoint p)
 {
     index         = p.index;
     controlPoint  = p.controlPoint;
     positionPoint = p.positionPoint;
     positionDis   = p.positionDis;
     controlDis    = p.controlDis;
 }
    // Use this for initialization
    void Start()
    {
        if (!Application.isPlaying)
        {
            if (bezierPoints.Count > 0 && bezierPoints[0] == null)
            {
                bezierPoints.Clear();
                foreach (MUIBezierPoint point in gameObject.GetComponents <MUIBezierPoint>())
                {
                    bezierPoints.Add(point);
                }
                return;
            }

            MUIBezierPoint[] pts = gameObject.GetComponents <MUIBezierPoint>();
            foreach (MUIBezierPoint point in pts)
            {
                DestroyImmediate(point);
            }
            foreach (MUIBezierPoint point in bezierPoints)
            {
                MUIBezierPoint p = gameObject.AddComponent <MUIBezierPoint>();
                p.Copy(point);
            }
            return;
        }

        bezierPoints.Clear();
        MUIBezierPoint[] points = gameObject.GetComponents <MUIBezierPoint>();
        foreach (MUIBezierPoint point in points)
        {
            bezierPoints.Add(point);
        }

        tween                = MUITweenValue.Begin(gameObject, duration, 1f);
        tween.startValue     = 0f;
        tween.startDelay     = startDelay;
        tween.style          = style;
        tween.animationCurve = animationCurve;
        tween.onFinished.Clear();
        tween.onFinished = onFinished;
        tween.Play();

        //Debug.Log(bezierPoints.Count);
    }
Beispiel #4
0
    public override void OnInspectorGUI()
    {
        if (mBezierValue == null)
        {
            return;
        }

        serializedObject.Update();

        GUI.changed = false;

        if (NGUIEditorTools.DrawHeader("Anchor"))
        {
            EditorGUILayout.PropertyField(serializedObject.FindProperty("anchorTarget"));
        }

        if (NGUIEditorTools.DrawHeader("Points"))
        {
            Transform anchorTrans = mBezierValue.anchorTarget;
            if (anchorTrans == null)
            {
                anchorTrans = mBezierValue.transform;
            }

            mBezierValue.anchorTarget = anchorTrans;

            for (int i = 0; i < mBezierPoints.Count; i++)
            {
                Vector2 position = mBezierPoints[i].positionPoint;
                Vector2 control  = mBezierPoints[i].controlPoint;
                Vector2 posDis   = mBezierPoints[i].positionDis;
                Vector2 ctrlDis  = mBezierPoints[i].controlDis;

                GUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Point" + i, EditorStyles.boldLabel);
                if (GUILayout.Button("Delete Point"))
                {
                    DestroyImmediate(mBezierValue.bezierPoints[i]);
                    mBezierPoints.RemoveAt(i);
                    continue;
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("position");
                GUILayout.Label("X");
                //在Inspector上显示的值是与当前的transform统一坐标系,且有锚点的话显示基于锚点的坐标
                if (anchorTrans == null)
                {
                    position.x = EditorGUILayout.FloatField(position.x / scaleFactor.x) * scaleFactor.x;
                }
                else
                {
                    position.x = EditorGUILayout.FloatField((position.x - anchorTrans.position.x) / scaleFactor.x) * scaleFactor.x + anchorTrans.position.x;
                    posDis.x   = position.x - anchorTrans.position.x;
                }

                GUILayout.Label("Y");
                if (anchorTrans == null)
                {
                    position.y = EditorGUILayout.FloatField(position.y / scaleFactor.y) * scaleFactor.y;
                }
                else
                {
                    position.y = EditorGUILayout.FloatField((position.y - anchorTrans.position.y) / scaleFactor.y) * scaleFactor.y + anchorTrans.position.y;
                    posDis.y   = position.y - anchorTrans.position.y;
                }

                GUILayout.EndHorizontal();
                mBezierPoints[i].positionPoint = position;
                if (anchorTrans != null)
                {
                    mBezierPoints[i].positionDis = posDis;
                }

                GUILayout.BeginHorizontal();
                GUILayout.Label("control");
                GUILayout.Label("X");
                if (anchorTrans == null)
                {
                    control.x = EditorGUILayout.FloatField(control.x / scaleFactor.x) * scaleFactor.x;
                }
                else
                {
                    control.x = EditorGUILayout.FloatField((control.x - anchorTrans.position.x) / scaleFactor.x) * scaleFactor.x + anchorTrans.position.x;
                    ctrlDis.x = control.x - anchorTrans.position.x;
                }

                GUILayout.Label("Y");
                if (anchorTrans == null)
                {
                    control.y = EditorGUILayout.FloatField(control.y / scaleFactor.y) * scaleFactor.y;
                }
                else
                {
                    control.y = EditorGUILayout.FloatField((control.y - anchorTrans.position.y) / scaleFactor.y) * scaleFactor.y + anchorTrans.position.y;
                    ctrlDis.y = control.y - anchorTrans.position.y;
                }

                GUILayout.EndHorizontal();
                mBezierPoints[i].controlPoint = control;
                if (anchorTrans != null)
                {
                    mBezierPoints[i].controlDis = ctrlDis;
                }
            }

            if (mBezierPoints.Count < 2)
            {
                EditorGUILayout.HelpBox("Bezier's line must have at least Two Points", MessageType.Warning);
            }

            GUILayout.Label("", GUILayout.Height(3));
            if (GUILayout.Button("Add Point"))
            {
                MUIBezierPoint point = mBezierValue.gameObject.AddComponent <MUIBezierPoint>();
                point.index = mBezierPoints.Count;
                Debug.Log(mBezierPoints.Count);
                point.positionPoint = new Vector2(Random.Range(-1f, 1f), Random.Range(-1f, 1f));
                point.controlPoint  = point.positionPoint + new Vector2(Random.Range(-.2f, .2f), Random.Range(-.2f, .2f));
                mBezierPoints.Add(point);
            }
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(mBezierValue);
        }

        serializedObject.ApplyModifiedProperties();
    }
Beispiel #5
0
    public override void OnInspectorGUI()
    {
        if (mBezier == null)
        {
            return;
        }

        serializedObject.Update();

        GUI.changed = false;

        EditorGUILayout.PropertyField(serializedObject.FindProperty("style"), new GUIContent("Play Style"));
        EditorGUILayout.PropertyField(serializedObject.FindProperty("animationCurve"));
        EditorGUILayout.PropertyField(serializedObject.FindProperty("duration"));
        EditorGUILayout.PropertyField(serializedObject.FindProperty("startDelay"));
        NGUIEditorTools.DrawEvents("On Finished", mBezier, mBezier.onFinished);

        if (NGUIEditorTools.DrawHeader("Points"))
        {
            for (int i = 0; i < mBezierPoints.Count; i++)
            {
                Vector2 position = mBezierPoints[i].positionPoint;
                Vector2 control  = mBezierPoints[i].controlPoint;

                GUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Point" + i, EditorStyles.boldLabel);
                if (GUILayout.Button("Delete Point"))
                {
                    DestroyImmediate(mBezier.bezierPoints[i]);
                    mBezierPoints.RemoveAt(i);
                    continue;
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("position");
                GUILayout.Label("X");
                position.x = EditorGUILayout.FloatField(position.x / scaleFactor.x) * scaleFactor.x;//在Inspector上显示的值是与当前的transform统一坐标系
                GUILayout.Label("Y");
                position.y = EditorGUILayout.FloatField(position.y / scaleFactor.y) * scaleFactor.y;
                GUILayout.EndHorizontal();
                mBezierPoints[i].positionPoint = position;

                GUILayout.BeginHorizontal();
                GUILayout.Label("control");
                GUILayout.Label("X");
                control.x = EditorGUILayout.FloatField(control.x / scaleFactor.x) * scaleFactor.x;
                GUILayout.Label("Y");
                control.y = EditorGUILayout.FloatField(control.y / scaleFactor.y) * scaleFactor.y;
                GUILayout.EndHorizontal();
                mBezierPoints[i].controlPoint = control;
            }

            if (mBezierPoints.Count < 2)
            {
                EditorGUILayout.HelpBox("Bezier's line must have at least Two Points", MessageType.Warning);
            }

            GUILayout.Label("", GUILayout.Height(3));
            if (GUILayout.Button("Add Point"))
            {
                MUIBezierPoint point = mBezier.gameObject.AddComponent <MUIBezierPoint>();
                point.index = mBezierPoints.Count;
                Debug.Log(mBezierPoints.Count);
                point.positionPoint = new Vector2(Random.Range(-1f, 1f), Random.Range(-1f, 1f));
                point.controlPoint  = point.positionPoint + new Vector2(Random.Range(-.2f, .2f), Random.Range(-.2f, .2f));
                mBezierPoints.Add(point);
            }
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(mBezier);
        }

        serializedObject.ApplyModifiedProperties();
    }