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); }
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(); }
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(); }