Editor helper class
에디터를 구현하면서 사용할 공통적인 함수들을 구현 해놓은 static 클래스
public static void DrawCenterLabel(GUIContent content, Color color, int size, FontStyle style)
{
...
GUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
GUILayout.Label(content, guiStyle);
GUILayout.FlexibleSpace();
}
GUILayout.EndHorizontal();
}
FlexibleSpace 함수를 통하여 아래와 같은 모양으로 가운데에 라벨을 띄우게 됨
FlexibleSpace - Content - FlexibleSpace
Tool window class
맵 생성 시 create 모드와 edit 모드 두 개의 모드로 이루어짐
create 모드에서는 생성할 맵 선택 영역과 버튼으로 이루어짐
void DrawCreateMode()
{
...
GUI.enabled = IsCreatable;
if (EditorHelper.DrawCenterButton("Create", new Vector2(100, 50)))
{
...
}
GUI.enabled = true;
}
GUI.enabled을 통하여 조건을 만족하지 않을 시 버튼이 눌리지 않도록 할 수 있음
Custom grid config class
맵 그리드를 만들기 위한 옵션 값들을 들고 있는 클래스
Custom grid class
맵 그리드를 그리기 위한 선들을 계산하는 클래스
public bool reposition;
private void OnValidate()
{
reposition = true;
}
public void RefreshPoints()
{
...
for (int i = 0; i <= config.CellCount.x; i++)
{
verLines[i * 2] = new Vector3(i * config.CellSize.x, config.CellSize.y * config.CellCount.y, 0);
verLines[i * 2 + 1] = new Vector3(i * config.CellSize.x, 0, 0);
}
for (int i = 0; i <= config.CellCount.y; i++)
{
horLines[i * 2] = new Vector3(0, i * config.CellSize.y, 0);
horLines[i * 2 + 1] = new Vector3(config.CellSize.x * config.CellCount.x, i * config.CellSize.y, 0);
}
}
인스펙터창에서 config가 수정될 시 reposition이 true가 되어 선 계산을 다시 하게 됨
Custom grid editor class
맵 그리드를 씬 뷰에 그리는 클래스
[CustomEditor(typeof(CustomGrid))]
public class CustomGridEditor : Editor
{
[DrawGizmo(GizmoType.InSelectionHierarchy | GizmoType.NotInSelectionHierarchy)]
static void DrawHandles(CustomGrid grid, GizmoType type)
{
...
Handles.DrawLines(grid.verLines);
Handles.DrawLines(grid.horLines);
}
}
기즈모 어트리뷰트를 추가하여 해당 함수를 통해 기즈모를 그리도록 구현