티스토리 뷰
Gameplay Ability System - Top Down RPG / Section 9-9
Just Move 2026. 7. 12. 07:06Setting Up Click to Move
이제 TopDown Template의 클릭 이동을 기반으로 하지만, GAS와 함꼐 사용할 수 있도록 수정된 이동 방식을 구현한다.
핵심은 다음과 같이 세 가지를 동시에 처리할 수 있도록 플레이어 컨트롤러를 구성하는 것이다.
마우스를 짧게 클릭하면 자동 이동
길게 누르면 마우스를 따라 계속 이동
적을 클릭한 경우에는 이동이 아니라 어빌리티 사용
먼저 PlayerController 내부에서 사용할 변수들을 만든다.
CachedDestination
- 플레이어가 클릭한 위치 저장
- 이동 방향 계산
- 자동 이동 시 목적지
- 클릭한 순간의 위치를 계속 기억하면서 이동하기 위함
FollowTime
- 마우스를 얼마나 오래 누르고 있었는지 기록
- 짧게 눌렀는지, 길게 눌렀는지 판단용
ShortPressThreshold
- 짧은 클릭의 기준이 되는 시간
AutoRunning
- 현재 자동 이동 중인지 판단
AutoRunAcceptanceRadius
- 도착 판정 거리
- 목적지와 해당 값 이하로 가까워지면 자동 이동 종료
SplineComponent
- 자동 이동 경로용

Spline의 경우 플레이어 컨트롤러가 생성될 때부터 항상 존재해야 하는 컴포넌트 이기에 생성자에서 초기화를 진행한다.
즉, 클릭할 때마다 Spline을 새로 생성하는 것이 아니라, SplineComponent를 하나만 미리 만들어 두고 경로가 바뀔 때마다 Spline Point만 다시 설정하는 구조이다.

이제 입력을 어떻게 처리할 것인지 정해야 한다.
마우스 왼쪽 버튼은 단순한 이동 버튼이 아니며, 상황에 따라 클릭 이동 / 자동 이동 / 적 클릭시 어빌리티 사용과 같이 3가지 역할을 가지고 있다.
따라서 마우스가 적 위에 위치한지 판단하기 위한 bool 변수를 하나 더 추가해주자.

마우스를 누른 순간 현재 적을 조준하고 있는지(Targeting)를 판단해야 한다.
따라서 AbilityInputTagPressed() 함수에서 이전에 커서 트레이스를 통해 갱신된 ThisActor를 확인한다.
ThisActor는 Enemy Interface를 구현한 액터를 저장하며, 유효한 객체라면 적을 조준 중인 것으로 판단한다.

다음으로 버튼을 누르고 있는 동안에 대한 처리이다.
가장 먼저 입력태그가 LMB가 맞는지 확인한다.
만약 아니라면 이동이 아니라 어빌리티 입력에 해당하므로, ASC의 AbilityInputTagHeld 함수를 호출한다.
LMB가 맞다면, 이번엔 Targeting 여부를 확인한다.
True라면 적 위를 클릭한 것이기에 마찬가지로 ASC의 AbilityInputTagHeld 함수를 호출한다.
false라면 이제 움직임을 수행할 차례이다.

마우스를 누르고 있는 동안에는, 해당 시간을 계산하여 담아두어야 한다.
해당 값은 나중에 짧은 클릭인지 판정할 때 사용된다.
그리고 LineTrace를 통해서 마우스의 Hit 위치를 저장하고, 이를 통해서 이동 방향을 계산할 것이다.
이동 방향은 Hit 위치에서 폰의 위치를 뺀 값을 정규화하여 계산한다.
(Vector의 뺄셈은 한 점에서 다른 점으로 향하는 방향 벡터를 구하는 연산이다.)
그리고 해당 방향을 통해서 AddMovementInput 함수를 호출하여 컨트롤 중인 Pawn을 이동시킨다.

컴파일 후 테스트해보면, 마우스를 클릭하는 동안 해당 방향으로 자연스럽게 계속 이동하는 모습을 볼 수 있다.

이제 다음 강의에서는 짧게 클릭했을 때의 자동 이동을 구현할 것이다.
'Study > [Unreal] Udemy 강의' 카테고리의 다른 글
| Gameplay Ability System - Top Down RPG / Section 9-11 (0) | 2026.07.14 |
|---|---|
| Gameplay Ability System - Top Down RPG / Section 9-10 (0) | 2026.07.13 |
| Gameplay Ability System - Top Down RPG / Section 9-8 (0) | 2026.07.11 |
| Gameplay Ability System - Top Down RPG / Section 9-7 (0) | 2026.07.09 |
| Gameplay Ability System - Top Down RPG / Section 9-6 (0) | 2026.07.09 |
