Custom grid class
public Vector2Int GetCellPos(Vector3 worldPos)
{
return new Vector2Int(Mathf.FloorToInt(worldPos.x / config.CellSize.x), Mathf.FloorToInt(worldPos.y / config.CellSize.y));
}
마우스 위치 값을 통해 현재 그리드의 위치를 알 수 있도록
월드 좌표를 그리드 좌표로 계산하여 반환하는 함수
Tool window class
private void OnEnable()
{
...
SceneView.duringSceneGui -= OnScencGUI;
SceneView.duringSceneGui += OnScencGUI;
}
private void OnScencGUI(SceneView obj)
{
var mousePos = Event.current.mousePosition;
var ray = HandleUtility.GUIPointToWorldRay(mousePos);
EditorHelper.Raycast(ray.origin, ray.origin + ray.direction * 300, out var hitPos);
}
Tool window enable 시 씬 이벤트 함수를 등록
씬 뷰에서 마우스가 이동할 때 이벤트가 발생하고,
마우스 위치를 통해 레이캐스팅하여 z가 0인 평면의 위치값 계산
private CustomGrid BuildGrid(Vector2Int cellCount, Vector2Int cellSize)
{
...
var grid = new GameObject("Grid").AddComponent<CustomGrid>();
grid.config = new CustomGridConfig();
grid.config.CellCount = cellCount;
grid.config.CellSize = cellSize;
return grid;
}
DrawCreateMode 함수에서 그리드의 cell count 와 size를 Vector2IntField 함수를 통하여 받고,
생성 버튼을 누를 시 해당 정보를 통해 씬에 grid를 추가하도록 구현
버튼을 누를 시 멤버 변수로 grid를 저장해두고, 모드를 edit 모드로 전환
public enum EditToolMode
{
Paint,
Erase,
}
edit 모드 시에 사용할 툴들을 enum으로 정의
public EditToolMode selectedEditToolMode = EditToolMode.Paint;
public GUIContent[] editToolModeContents;
그리고 멤버 변수에 mode와 GUIContent 배열을 선언한다.
private void OnEnable()
{
editToolModeContents = new GUIContent[]
{
EditorGUIUtility.TrIconContent("Grid.PaintTool", "Paint mode"),
EditorGUIUtility.TrIconContent("Grid.EraserTool", "Erase mode")
};
...
}
OnEnable 시 icon 콘텐트를 저장
void DrawEditMode()
{
GUILayout.BeginHorizontal(EditorStyles.toolbar);
{
if (GUILayout.Button("create mode", EditorStyles.toolbarButton))
{
ClearAll();
ChangeMode(EditMode.Create);
}
}
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
selectedEditToolMode = (EditToolMode) GUILayout.Toolbar((int)selectedEditToolMode, editToolModeContents, "LargeButton", GUILayout.Width(100), GUILayout.Height(40));
GUILayout.FlexibleSpace();
}
GUILayout.EndHorizontal();
}
DrawEditMode 함수에서는 생성 모드로 돌아갈 수 있도록 하는 버튼과
툴들을 선택할 수 있도록 하는 버튼들을 보여줄 수 있도록 한다.