🎯 오늘의 목표
던전형 구조에서 방(Room)을 자동 생성하고, 문(Door)을 통해 플레이어가 자연스럽게 이동할 수 있도록 방 간 연결 시스템을 구축하는 것이 목표였다. 단방향이 아닌 양방향 문 연결 및 플레이어 충돌 처리 이슈 해결에 초점을 맞췄다.
📌 주요 구현 내용 및 코드 중심 설명
RoomGenerator 스크립트 기반 방 생성 로직 작성
1. 랜덤한 방 생성 및 문 연결
- 시작 방은 (0,0)을 기준으로 생성하며, 이후 maxRooms 수 만큼 상하좌우 방향으로 확장되도록 설계.
- 방의 위치는 Dictionary<Vector2Int, Room>으로 관리되며, 중복 위치 생성을 방지함.
Vector2Int newPos;
do {
Vector2Int dir = directions[Random.Range(0, directions.Length)];
newPos = currentPos + dir;
} while (rooms.ContainsKey(newPos));
- Room.Init()에서는 타일맵의 바운드 정보를 활용해 방의 실제 월드 위치 및 각 방향의 문 좌표를 계산함.
entryPositions[Vector2Int.left] = new Vector3(transform.position.x + bounds.min.x + 1f, center.y, 0f);
2. 방 연결 시 문 자동 생성 (GenerateDoorsForAllRooms)
- 각 방에 대해 인접한 위치에 다른 방이 있을 경우, 문을 생성하도록 처리.
- 이 방식은 일방향이 아닌 양방향 연결이 자연스럽게 생성되도록 한다.
if (rooms.ContainsKey(neighborPos))
{
CreateDoorAt(room, dir);
}
- 문 생성 시 방향에 따라 문 오브젝트의 Scale 값을 조절해 시각적으로 정렬되도록 함.
if (direction == Vector2Int.up)
{
door.transform.localScale = new Vector3(1, 0.5f, 1);
}
- 문에는 EntryTrigger가 부착되어 있으며, 진입 방향 정보(direction)가 함께 저장됨.
RoomNavigator
1. 플레이어의 진입 방향을 기준으로 위치 계산 및 이동
- 플레이어는 문에 진입하면 GetEntryPositionFrom(fromDirection)을 통해 다음 방의 입구로 이동.
- entry + offset 방식으로 문 근처에 자연스럽게 배치되며, 겹침 방지를 위해 이동 시 약간의 오프셋 적용.
Vector3 offset = ((Vector2)fromDirection).normalized * 1.0f;
Vector3 targetPos = entry + offset;
2. 이동 시 충돌 처리 임시 비활성화로 트리거 반복 방지
- 이동 직후 문과 다시 충돌하는 루프를 방지하기 위해 플레이어의 Collider2D를 0.2초간 비활성화.
playerCollider.enabled = false;
player.transform.position = targetPosition;
yield return new WaitForSeconds(0.2f);
playerCollider.enabled = true;
- 이 방식은 플레이어가 문 입구에 정확히 배치되어도 이동 처리가 중복 발생하지 않도록 함.
📌 오늘 겪은 주요 트러블과 해결 과정
플레이어가 이동 중 문과 계속 충돌
- 문을 통해 이동한 직후, 플레이어가 문 충돌 판정에 걸려 반복 이동 루프 발생.
- 해결: isTransitioning 플래그 + Coroutine을 이용해 충돌 감지를 일시 비활성화.
💡 오늘 느낀 점
방 생성 로직은 단순히 오브젝트를 배치하는 수준이 아니라, 게임 월드의 구조적 연결성과 플레이어 경험을 함께 고려해야 한다는 것을 느꼈다. 특히 문이 잘못 연결되면 플레이어가 진행을 못하거나, 이동 중 끊김 없는 흐름을 유지하기 어려워진다는 점에서 세심한 위치 계산과 충돌 처리 타이밍이 매우 중요했다.
✅ 내일 목표
- 문마다 플레이어를 어느 위치로 이동시킬지 Offset 기준을 명확하게 데이터화
- 미니맵 시스템의 기본 뼈대 구성
- 방마다 고유 ID 또는 이름 부여 및 디버깅용 UI 출력
'TIL' 카테고리의 다른 글
| Unity 협업 중 프리팹 충돌 및 .meta 파일 관련 트러블 슈팅 (1) | 2025.05.15 |
|---|---|
| 방 종류 추가와 문 생성 수정 (0) | 2025.05.12 |
| 2D 팀 프로젝트 기획하기 (1) | 2025.05.08 |
| 미니게임 UI 흐름 및 점수 갱신 관련 문제 해결 기록 (1) | 2025.05.07 |
| 카메라 추적 기능(Camera Follow) (1) | 2025.05.02 |