에디터툴에서 타일맵을 생성하면 기본적으로 0층(Floor0)을 가지고 있는 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 리스트에서 관리한다.
public class CustomFloor : MonoBehaviour
{
public Transform parentTilemap;
public int floor = -1;
public List<GameObject> tiles = new List<GameObject>();
}
CustomFloor는 해당 층에 생성된 타일들을 tiles 리스트에 저장한다.
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]의 값을 넣는다.