본문 바로가기

Unreal5/TPS 캐릭터 만들기

TPS 캐릭터 만들기 - 락온(에임 트래커) 기능 만들기

*언리얼엔진5를 배우며, 졸업작품을 만들며 제작하는 내용을 작성하는 블로그입니다.

공부 내용을 적는 곳이므로 틀린 것이 매우 많을 수 있으며, 피드백 달게 받겠습니다 매우 환영합니다!
*현재는 프로토 타입일 뿐이라 최종 결과와는 많이 다를 수 있습니다!

 

제작된 결과:

https://youtu.be/iAnkZCH4Qdk

*원 범위 내에 트래킹 가능한 플레이어가 있을 경우 가장 가까운 대상을 따라 에임을 이동시키도록 한다.

에임이 따라가는 속도는 아직 수정하지 않은 임시 수치이며, 캐릭터가 너무 빨라서 원범위에서 벗어나지면 트래킹 기능 또한 작동을 중지한다.

 

 

먼저 Enhanced Input 에 대한 부분으로, 시작 할 때 RightClick 이 된 시간을 저장하고 (트래킹이 초반 1초는 빠르게 쫓지만 그 이후론 천천히 가도록 하는 기능을 위하여)
떼지면 모든 설정이 초기화되도록 지정하였다.

 

다음으로 LockOn이 되는 부분으로,

CheckLockOnPlayerCount 변수는 현재 원 범위 안에 플레이어가 몇 명인지 체크하는 변수이다.

 

GetAllActorswithTag를 통해 액터배열을 얻어 forloop로 체크하는 방식이다.

모든 액터에 대해서 내 캐릭터인지 아닌지를 체크 한 뒤,

 

다음으로 원 범위 안에 플레이어가 있는지 체크하는 부분이다.
내 캐릭터가 아니라면,
해당 캐릭터의 위치를 내 플레이어 컨트롤러 기준으로 screen 좌표계로 변경한 뒤
내 뷰포트 사이즈를 받아와서 /2를 통해 중앙 위치의 좌표를 알아내고, Distance를 통해 거리 내에 있는지 파악하는 방식으로 진행했다.

 

만약 원 범위 안에 캐릭터가 있던 것으로 파악되면,
CheckLockOnPlayerCount 변수를 ++ 해주고, 그 거리를 비교하여 내 현재 저장된 액터의 거리보다 가깝다면 갱신시키는 방식이다.

 

ForLoop 가 끝나면 먼저 원 범위 안에 있는 플레이어 수가 아무도 없다면, 기존 저장 정보를 리셋하고,

 

만약 LockOnActor가 Valid 하다면,
내 플레이어 컨트롤러를 Set Control Rotation 하는데,

내 현재 플레이어 컨트롤러의 Control Rotation과
내 카메라 위치에서 LockOnActor의 위치에 대한 벡터의 Rotator를 보간하여 그 결과로 변경한다.