유니티 로그라이크 문으로 방 연결하기Unity/Study2023. 12. 18. 17:48
Table of Contents
📌 연결된 문 생성
📄 Dungeon.cs
private void CreateDungeon()
{
// 방 생성을 위한 좌표 리스트
List<Vector2Int> alternativeRoomList = new();
List<Vector2Int> hasBeenRemoveRoomList = new();
// 특수 방 리스트
List<Room> specialRoomList = new();
...
...
...
LinkDoors();
// 방 문이 1개인 경우 => 특수 방으로 추가
foreach (Room room in _roomArray)
{
if (room != null && room.ActiveDoorCount == 1 && room != currentRoom)
{
specialRoomList.Add(room);
}
}
}
- GameScene 클래스를 Dungeon 클래스로 교체
- specialRoomList는 특수 방을 모으기 위한 리스트
- LinkDoors 메서드는 배치 된 방 마다 연결된 문을 생성해준다.
- 특수 방 같은경우는, 시작 방을 제외한 해당 방에 문이 1개 밖에 없으면, 특수방 조건으로 맞춰준다.
📄 LinkDoors
/// <summary>
/// 방 기준으로 상하좌우 방이 존재 시, 문 생성
/// </summary>
private void LinkDoors()
{
foreach (Room room in _roomArray)
{
if (room != null)
{
int x = room.Coordinate.x;
int y = room.Coordinate.y;
if (_roomArray[x + 1, y] != null)
{
room.ActivationDoor(RoomDirection.Up, _roomArray[x + 1, y], _roomArray[x + 1, y].DoorList[1]);
}
if (_roomArray[x - 1, y] != null)
{
room.ActivationDoor(RoomDirection.Down, _roomArray[x - 1, y], _roomArray[x - 1, y].DoorList[0]);
}
if (_roomArray[x, y - 1] != null)
{
room.ActivationDoor(RoomDirection.Left, _roomArray[x, y - 1], _roomArray[x, y - 1].DoorList[3]);
}
if (_roomArray[x, y + 1] != null)
{
room.ActivationDoor(RoomDirection.Right, _roomArray[x, y + 1], _roomArray[x, y + 1].DoorList[2]);
}
}
}
}
- 배치된 방을 다 가져와 상하좌우에 근접한 방이 있으면 문을 생성한다.
📄 Room.cs
public void ActivationDoor(RoomDirection direction, Room neighborRoom, GameObject neighborDoor)
{
var door = doorList[(int)direction];
for (int i = 0; i < door.transform.childCount; i++)
{
door.transform.GetChild(i).gameObject.SetActive(true);
}
activeDoorList.Add(door);
neighborDoorList.Add(neighborDoor);
neighborRoomList.Add(neighborRoom);
}
- doorList 배열에서 주어진 방향(RoomDirection)에 해당하는 문을 가져온다.
- 활성화된 문은 for문으로 그 문의 자식오브젝트를 활성화하여, 문의 이미지를 가져온다.
- activeDoorList, neighborDoorList, neighborRoomList 활성화된 문과 그 이웃한 문, 이웃한 방을 리스트에 추가하여 나중에 방과 문 간의 상호 작용 및 추적에 사용할 예정이다.
💡 결과 구현
'Unity > Study' 카테고리의 다른 글
유니티 로그라이크 방 타입에 맞는 오브젝트 생성 (0) | 2023.12.21 |
---|---|
유니티 로그라이크 다음 방으로 이동 (0) | 2023.12.19 |
유니티 로그라이크 방 생성 (0) | 2023.12.15 |
유니티 Json 데이터 관리 (0) | 2023.12.12 |
유니티 Stat Modifier (0) | 2023.12.11 |