public void AddElement(Vector3 pos, Vector3 eulerAngles) { FTPathNode p = AddElement(); p.transform.position = pos; p.transform.eulerAngles = eulerAngles; }
public FTPathNode DelElement(int index) { FTPathNode t = PathNodes[index]; GameObject.DestroyImmediate(t.gameObject); PathNodes.RemoveAt(index); return(null); }
public FTPathNode AddElement() { FTPathNode t = new GameObject(typeof(FTPathNode).Name).AddComponent <FTPathNode>(); t.transform.parent = transform; t.Init(); if (PathNodes.Count >= 2) { FTPathNode p1 = PathNodes[PathNodes.Count - 1]; FTPathNode p2 = PathNodes[PathNodes.Count - 2]; t.Pos = (p1.Pos - p2.Pos) + p1.Pos; } PathNodes.Add(t); return(t); }
public override void OnDrawInspector() { #if UNITY_EDITOR GUILayout.Space(10); this.ID = UnityEditor.EditorGUILayout.IntField("ID", this.ID); this.Type = (EPathNodeType)UnityEditor.EditorGUILayout.EnumPopup("Type", this.Type); this.PositionVary = UnityEditor.EditorGUILayout.Toggle("PositionVary", this.PositionVary); this.RotationVary = UnityEditor.EditorGUILayout.Toggle("RotationVary", this.RotationVary); if (GUILayout.Button("添加路点")) { AddElement(); } int index = -1; for (int i = 0; i < PathNodes.Count; i++) { FTPathNode node = PathNodes[i]; if (node == null) { continue; } GUILayout.BeginHorizontal(); GUILayout.Label(node.name); GUILayout.Label(node.Pos.ToString()); GUILayout.Label(node.Face.ToString()); GUI.color = Color.cyan; if (GUILayout.Button("I")) { InsElement(i); } GUI.color = Color.red; if (GUILayout.Button("X")) { index = i; } GUI.color = Color.white; GUILayout.EndHorizontal(); } if (index >= 0) { DelElement(index); } GUILayout.Space(5); #endif }
public static void DrawPathNodes(EPathNodeType type, List <FTPathNode> pathNodes) { #if UNITY_EDITOR if (pathNodes.Count < 2) { return; } UnityEditor.Handles.color = Color.green; for (int i = 0; i < pathNodes.Count; i++) { FTPathNode n1 = pathNodes[i]; if (n1 == null) { pathNodes.RemoveAt(i); break; } n1.name = string.Format("P {0}", i); FTDraw.DrawGizmosSphere(n1.transform, Color.green, 0.5f); FTDraw.DrawLabelIcon(n1.gameObject, 6); if (i < pathNodes.Count - 1) { FTPathNode n2 = pathNodes[i + 1]; if (n2 == null) { continue; } switch (type) { case EPathNodeType.Linear: UnityEditor.Handles.DrawBezier(n1.transform.position, n2.transform.position, n1.transform.position, n2.transform.position, Color.green, null, 2); break; case EPathNodeType.Bezier: UnityEditor.Handles.DrawBezier(n1.transform.position, n2.transform.position, n1.TangentOut, n2.TangentIn, Color.green, null, 2); break; } } } #endif }
public FTPathNode InsElement(int index) { FTPathNode t = new GameObject(typeof(FTPathNode).Name).AddComponent <FTPathNode>(); t.transform.parent = transform; t.Init(); FTPathNode p1 = null; FTPathNode p2 = null; if (index > 0) { p1 = PathNodes[index - 1]; } if (index <= PathNodes.Count - 1) { p2 = PathNodes[index]; } if (p1 != null && p2 != null) { t.Pos = (p1.Pos + p2.Pos) * 0.5f; } PathNodes.Insert(index, t); return(t); }