private void OnSceneGUI() { Source = (NodeMove)target; for (int i = 0; i < Source.Nodes.Count; i++) { Source.Nodes[i] = Handles.PositionHandle(Source.Nodes[i], Quaternion.identity); Handles.Label(Source.Nodes[i], "Node " + (i + 1)); } if (GUI.changed) { EditorUtility.SetDirty(Source); EditorSceneManager.MarkSceneDirty(Source.gameObject.scene); } }
/// <summary> /// 目的地までの最短ルートをチェックする /// </summary> /// <param name="cursorManager">Cursor manager.</param> /// <param name="endPos">End position.</param> public void CheckShortestRoute(ref CursorManager cursorManager, Vector3 endPos) { // 最短の移動ルート情報 cursorManager.moveRoot = new List <Vector3>(); // 開始地点から終了地点までたどり着けるか bool isEnd = false; NodeMove[,] nodeList = new NodeMove[MapManager.GetFieldData().height, MapManager.GetFieldData().width]; nodeList[-(int)cursorManager.focusUnit.moveController.getPos().y, (int)cursorManager.focusUnit.moveController.getPos().x].aREA = AREA.UNIT; // スタート地点からエンドまで再帰的に移動コストをチェックする CheckRootAreaRecursive(ref nodeList, ref cursorManager.activeAreaList, cursorManager.focusUnit.moveController.getPos(), ref endPos, 0, ref isEnd); // ゴールできる場合は最短ルートをチェックする if (isEnd) { cursorManager.moveRoot = CheckEndRoot(ref cursorManager, ref nodeList, endPos); } }
public override void OnInspectorGUI() { Source = (NodeMove)target; base.OnInspectorGUI(); if (GUILayout.Button("Add Node")) { Source.Nodes.Add(Source.transform.position); } if (GUILayout.Button("Remove Node") && Source.Nodes.Count > 0) { Source.Nodes.RemoveAt(Source.Nodes.Count - 1); } if (GUI.changed) { EditorUtility.SetDirty(Source); EditorSceneManager.MarkSceneDirty(Source.gameObject.scene); } }