[Unity] 커스텀 타일맵 3 - 층 생성

0시0분·2023년 6월 13일
0

Unity

목록 보기
5/19

결과


에디터툴에서 타일맵을 생성하면 기본적으로 0층(Floor0)을 가지고 있는 CustomTilemap이 생성된다.

여기에 새로운 층을 추가하고, 층을 이동하며 오브젝트를 생성할 수 있도록 한다.

(1) 새 Floor 생성

[CustomTilemap]

public void CreateNewFloor()
{
    GameObject newFloor = new GameObject();
    newFloor.transform.SetParent(this.transform);
    newFloor.name = "Floor" + floors.Count;
    newFloor.AddComponent<CustomFloor>();

    CustomFloor customFloor = newFloor.GetComponent<CustomFloor>();
    customFloor.parentTilemap = this.transform;
    customFloor.floor = floors.Count;

    floors.Add(newFloor);
}

'새 Floor 생성' 버튼을 누르면 CustomFloor 컴포넌트를 가지고 있는 GameObject를 생성한다.
생성된 Floor는 CustomTilemap의 floors 리스트에서 관리한다.

[CustomFloor]

public class CustomFloor : MonoBehaviour
{
    public Transform parentTilemap;
    public int floor = -1;
    public List<GameObject> tiles = new List<GameObject>();
}

CustomFloor는 해당 층에 생성된 타일들을 tiles 리스트에 저장한다.

(2) 층 이동

[CustomTilemapTool]

tilemap.currEditFloor = EditorGUILayout.IntField("", tilemap.currEditFloor);
if (GUILayout.Button("^", GUILayout.Width(60)))
{
    if (tilemap.CalculateFloorUp())
    {
        editFloor = tilemap.floors[tilemap.currEditFloor];
        floorIndex += floorSpaceSize;
    }
}
if (GUILayout.Button("v", GUILayout.Width(60)))
{
    if (tilemap.CalculateFloorDown())
    {
        editFloor = tilemap.floors[tilemap.currEditFloor];
        floorIndex -= floorSpaceSize;
    }
}

변수
editFloor : 현재 수정하고 있는 층
floorSpaceSize : 이동할 층의 간격 (기본값은 1 = 한 층 이동)

editFloor에 CustomTilemap.floors[변경된 층 index]의 값을 넣는다.

0개의 댓글