본문 바로가기
UE5 : Paper 2D (Blueprint)/타일맵

[UE5 : Paper2D(BP) - 타일맵] Chapter 05. 타일 단위 이동

by song.ift 2024. 1. 15.

GitHub : https://github.com/developeSHG/UE5-Paper2D/commit/a93be1324f8a1cb7d501bd0ed235797ac780b0b3

 

 

 


 

 

바람의 나라처럼 타일을 한 칸씩 일정 시간에 거쳐서 스르륵 이동하는 것을 구현해볼 것.

구현하는 방법이 여러가지 있을 수 있는데, 플레이어가 현재 위치가 어디 있는지를 Actor Location 이라는 디테일이 있는 정보로 알 수 있지만, 현재 긔드 기준으로 몇 번 좌표에 위치해있는지를 따로 관리하는 방법이 있다.

 

그래서 몇 번 좌표로 이동해야한다고 하면 우선 그리드 좌표는 바로 이동을 하되, 실질적으로 월드 기준으로 하는 좌표는 조금 뒤따라가서 스르륵 이동하게끔 만들면 쉽다. 

 

그리드 포지션 같은 경우는 내가 어떤 특정 좌표에 있다가 바로 다음 칸으로 이동해야 될 때, 그리드 포지션을 바로 바꿔주게 된다. 목적지의 개념으로 볼 수 있다.

먼저 바꿔주는 이유는 혹시라도 여러 유닛들끼리 충돌이 일어난다고 가정했을 때, 한 유닛만이 자리 선점을 해야되는 개념이기 때문이다. 

 

키보드를 눌러서 목적지가 다른 데로 딱 세팅이 되었으면 그 장소로 스르륵 이동하게끔 유도해야 되니까 위 함수의 기존 코드도 약간 바뀌어야 된다.

 

 

- Set Destination 함수

x, y에 따른 실제 좌표를 구하기 위해 Get Actor Of Class로 Tile Map의 Get Tile Pos를 호출하면 된다.

Valid 체크를 통해 그 좌표로 이동할 수 있는지 체크하고, Grid 포지션에 갱신한다. 

Location이 결국 이동해야 될 실제 좌표가 될건데, 내부적인 변수로 관리하기 위해 목적지란 의미의 Dest Location에 저장하고, Force Move(강제 이동)이 아닐 경우, Set Actor Location을 이용해서 목적지로 이동한다. 

 

 

- Update Destination 함수

이동하고 싶은 Direction에 따라 다음 Grid Pos가 얼마인지 체크해준다. (Direction에 따른 Select 체크)

조심해야 할 것은 이동 범위를 넘어 맵 밖으로 벗어날 수 있기 때문에 유효 범위 체크를 해준다. (Get Actor Of Class로 Tile Map의 Can Go 검사) 

브랜치에 따라 Set Destination 호출. 

댓글