void OnEnable() { //타겟 컴포넌트 Genarator = (AI_MovePath)target; //리스트 갯수 받아올 데이터 reorderableList = new ReorderableList(serializedObject, serializedObject.FindProperty("MovePosition")); reorderableList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "MovePosition"); }; //리스트 안에 GUI구성 reorderableList.drawElementCallback = (rect, index, isActive, isFocused) => { Genarator.MovePosition[index] = EditorGUI.Vector3Field(rect, index.ToString(), Genarator.MovePosition[index]); }; //리스트에 +버튼 눌렀을 때 처리 reorderableList.onAddCallback += (list) => { if (Genarator.MovePosition.Count > 0) { //Genarator.MovePosition.Insert(list.index, new Vector3(Genarator.MovePosition[list.index -1].x, Genarator.MovePosition[list.index].y, Genarator.MovePosition[list.index].z)); //Genarator.MovePosition.Insert(list.index, Genarator.MovePosition[list.index - 1]); Genarator.MovePosition.Add(Genarator.MovePosition[Genarator.MovePosition.Count - 1]); } else { Genarator.MovePosition.Add(Genarator.transform.position); } }; //리스트에 -버튼 눌렀을 때 처리 reorderableList.onRemoveCallback += (list) => { Genarator.MovePosition.RemoveAt(list.index); }; }
void OnSceneGUI() { Genarator = (AI_MovePath)target; if (Genarator.MovePosition != null && Genarator.MovePosition.Count > 0) { //기본 폰트 스타일 StringStyle.normal.textColor = Color.green; StringStyle.fontStyle = FontStyle.Bold; StringStyle.fontSize = 30; StringStyle.alignment = TextAnchor.MiddleCenter; //버튼 스타일 var ButtonStyle = new GUIStyle(GUI.skin.button); ButtonStyle.normal.textColor = Color.white; ButtonStyle.fontStyle = FontStyle.Bold; ButtonStyle.fontSize = 15; ButtonStyle.alignment = TextAnchor.MiddleCenter; for (int i = 0; i < Genarator.MovePosition.Count; i++) { if (!HideGizmo) { Genarator.MovePosition[i] = Handles.PositionHandle(Genarator.MovePosition[i], Quaternion.identity); //기즈모 표시 } if (!HideIndex) { Handles.Label(Genarator.MovePosition[i] + new Vector3(0, -0.25f, 0), i.ToString(), StringStyle); //배열 숫자 표시 } if (!HideButton) { Handles.BeginGUI(); //위치 추가 GUI.backgroundColor = new Color(0.3f, 0.5f, 2); if (GUI.Button(new Rect(HandleUtility.WorldToGUIPoint(Genarator.MovePosition[i]).x, HandleUtility.WorldToGUIPoint(Genarator.MovePosition[i]).y - 65, 80, 20), "Add", ButtonStyle)) { Genarator.MovePosition.Insert(i, new Vector3(Genarator.MovePosition[i].x, Genarator.MovePosition[i].y, Genarator.MovePosition[i].z)); } //위치 제거 GUI.backgroundColor = new Color(2, 0.5f, 0.2f); if (GUI.Button(new Rect(HandleUtility.WorldToGUIPoint(Genarator.MovePosition[i]).x, HandleUtility.WorldToGUIPoint(Genarator.MovePosition[i]).y - 40, 80, 20), "Remove", ButtonStyle)) { Genarator.MovePosition.RemoveAt(i); } Handles.EndGUI(); } } Handles.color = new Color(2, 0.5f, 0.2f, 5); Vector3[] Vector3Array = new Vector3[Genarator.MovePosition.Count]; for (int i = 0; i < Vector3Array.Length; i++) { Vector3Array[i] = Genarator.MovePosition[i]; } Handles.DrawAAPolyLine(10, Genarator.MovePosition.Count, Vector3Array); } else { Genarator.MovePosition = new List <Vector3>(); } }