![유니티 로그라이크 다음 방으로 이동](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyrsqs%2FbtsCg3d4d5d%2FzWYAkrSPvUC1wynPsAbNGK%2Fimg.gif)
유니티 로그라이크 다음 방으로 이동Unity/Study2023. 12. 19. 00:42
Table of Contents
기능 구현
MoveToDesignativeRoom
/// <summary>
/// 방에 진입할 시, 좌표 설정 및 문 활성화 체크
/// </summary>
/// <param name="MoveDirection">들어간 방향</param>
/// <returns>카메라 움직임 딜레이</returns>
private IEnumerator MoveToDesignativeRoom(Vector2Int MoveDirection)
{
int x = _currentRoom.Coordinate.x + MoveDirection.y;
int y = _currentRoom.Coordinate.y + MoveDirection.x;
_currentRoom = _roomArray[x, y];
_currentRoom.OpenActivatedDoor();
Main.Game.Player.transform.position += new Vector3(MoveDirection.x * 5, MoveDirection.y * 5);
// 카메라 세팅
Vector3 originPos = Camera.main.transform.position;
Vector3 targetPos = _currentRoom.transform.position;
targetPos.z += Camera.main.transform.position.z;
// 카메라 움직임 연출
float delaySeconds = 0.3f;
float time = 0;
while (time <= delaySeconds)
{
Camera.main.transform.position = Vector3.Lerp(originPos, targetPos, (1 / delaySeconds) * (time += Time.deltaTime));
yield return null;
}
}
- 방에 진입할 때의 동작을 처리하는 메서드로, 좌표 설정, 문 활성화, 미니맵 업데이트, 플레이어와 카메라의 이동을 담당한다
- MoveDirection에 따라 현재 방의 좌표를 계산하고, 해당 방을 _currentRoom에 설정한다
- OpenActivatedDoor 메서드를 통해 현재 방에 있는 활성화된 문을 연다
- 방에 진입 시, 플레이어도 정해진 좌표만큼 방으로 옮기게 한다
- 방에 진입 시, 카메라도 해당 방으로 이동하고, 부드러운 이동을 위해 Lerp 함수를 사용하여 카메라의 위치를 조정
Door.cs
/// <summary>
/// 맨 처음 시작 시, 방 설정
/// </summary>
private void MoveToStartRoom()
{
StartCoroutine(MoveToDesignativetRoom(Vector2Int.zero));
}
/// <summary>
/// 들어간 방향에 따라, 다음 방 활성화
/// </summary>
/// <param name="MoveDirection">들어간 방향</param>
public void MoveToNextRoom(Vector2Int MoveDirection)
{
StartCoroutine(MoveToDesignativetRoom(MoveDirection));
}
- MoveToStartRoom은 게임 시작 시, 시작 방에 있는 문은 기본적으로 활성화시키기 위해 따로 만듦
- MoveToNextRoom은 플레이어가 들어간 방향에 따라, 해당 방으로 이동시키고, 조건에 따라 문을 활성화한다
Player.cs
/// <summary>
/// 문 접촉시 해당 방향에 맞는 다음방으로 이동
/// </summary>
/// <param name="collision"></param>
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.transform.CompareTag("DoorCollider"))
{
if (collision.transform.name == "Up")
{
Main.Game.Dungeon.MoveToNextRoom(Vector2Int.up);
}
else if (collision.transform.name == "Down")
{
Main.Game.Dungeon.MoveToNextRoom(Vector2Int.down);
}
else if (collision.transform.name == "Left")
{
Main.Game.Dungeon.MoveToNextRoom(Vector2Int.left);
}
else if (collision.transform.name == "Right")
{
Main.Game.Dungeon.MoveToNextRoom(Vector2Int.right);
}
}
}
- OnCollisionEnter2D를 통해, 활성화된 문에 접촉 시 해당 문의 적힌 이름에 따라, 해당 방으로 이동이 된다
구현 결과
'Unity > Study' 카테고리의 다른 글
유니티 실시간 딜레이 계산 (0) | 2024.01.24 |
---|---|
유니티 로그라이크 방 타입에 맞는 오브젝트 생성 (0) | 2023.12.21 |
유니티 로그라이크 문으로 방 연결하기 (0) | 2023.12.18 |
유니티 로그라이크 방 생성 (0) | 2023.12.15 |
유니티 Json 데이터 관리 (0) | 2023.12.12 |