-
가장 처음으로 플레이어의 이동 로직을 구현해 보았습니다.
Unity 엔진 부터 살펴보겠습니다.
Sprite를 활용해 플레이어와 사각의 벽을 세워 둔 모습이며
사각의 벽 (Obstacle) 에는 레이어를 'Obstacle'로 적용해 주었습니다.
다음은 스크립트입니다.
스크립트명은
'PlayerMovement'입니다.
선언된 변수들은 다음과 같습니다.
SerializeField
속성으로 설정되어 있으면 private 라도 인스펙터 창에서 값 조정이 가능합니다.
moveSpeed
플레이어가 목표 위치로 이동하는 속도를 나타냅니다.
obstacleLayer
이동을 막는 장애물 레이어 입니다.
targetPosition
플레이어가 이동할 목표 타일 좌표를 저장합니다.
isMoving
플레이어가 이동 중인지 판단할 불 변수 입니다.
direction
현재 이동 방향을 나타내는 변수 입니다. 방향키를 눌러 설정할 수 있습니다.
(여기서 사용한 Vector2Int는 정수로만 좌표를 표현 한다고 하여 사용하였습니다.)
다음으로 Start 함수에서 플레이어의 초기 위치를 초기화 해주었습니다.
여기서 RoundToInt를 사용하였는데,
RoundToInt는 소수점이 있을 경우 정수 좌표로 반환하여 타일 기준 위치에 만들었습니다.
다음은 Update 함수 입니다.
위에서 부터 살펴 보겠습니다.
가장 먼저 첫번째로 isMoveing이 false 일때만 입력을 처리하는 조건문 입니다.
이유는 방향키를 눌러 이동 중일때는 처리하지 않기 위함 입니다.
각 키를 입력하면 실행될 StartMoving 함수 입니다.
이동 하려는 다음칸에 장애물이 없을 경우 이동을 합니다.
이동의 확인은 Raycast를 이용하여 판단하였습니다.
해당 방향으로 1 단위로 레이를 발사하고, 레이에 충돌 검사가 이루어지면
direction 을 zero로 설정하여 줍니다.
다음은 방향키를 떼면 direction을 Vector2Int.zero로 설정하여 이동을 중지할 준비를 합니다.
이동 중 방향을 초기화하여 이동이 완료되면 다른 방향으로 이동을 멈추게 하는 조건문 입니다.
다음은 이동 로직 입니다.
transform의 position을 부드럽게 이동시키기 위해 MoveTowards를 사용하여 Time.deltaTime을 곱해 주었습니다.
MoveTowards의 인자를 살펴 보자면 첫번째 인자는 현재 위치이고, 두번째 인자는 목표 위치 입니다.
다음 목표 위치에 도달했는지 확인을 한 뒤 이동을 멈추게 하는 구현이였는데
추가로 방향이 zero가 아니면 이동을 계속하는 로직을 동작 테스트를 하며 추가했었습니다.
가장 먼저 해야 할 일은 플레이어가 맵을 돌아다닐수 있게 타일맵으로 맵 디자인을 하는것과
플레이어 애니메이션 클립 등 리소스를 조금 찾아봐야 할 것 같습니다.
감사합니다.
'유니티 프로젝트 > RPG-2D' 카테고리의 다른 글
Land Of Memories - Tile Map (0) 2024.11.14 Land Of Memories - Camera Follow (0) 2024.11.13 Land Of Memories - Player Attack (Basic) (0) 2024.11.13 Land Of Memories - Player Movement (Anim) (0) 2024.11.13 Land Of Memories - Prolog (0) 2024.11.12