Map tool 구현1

ㅋㅋ·2022년 9월 15일
0

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);
    }
}

기즈모 어트리뷰트를 추가하여 해당 함수를 통해 기즈모를 그리도록 구현

0개의 댓글