본문 바로가기
게임 개발 학습/[Unreal] Udemy 강의

Gameplay Ability System - Top Down RPG / Section 11-6

by Just Move 2026. 8. 20.

Send Mouse Cursor Data

기존에는 마우서 커서의 아래의 Hit Result를 가져와서 그대로 Delegate를 Broadcast하는 방식으로 처리하고 있었다.

하지만 이러한 방식은 로컬 플레이어에게만 유효한 데이터를 얻을 수 있으며, 서버 입장에서는 로컬로 제어되지 않는 플레이어의 마우스 커서 데이터를 직접 알 수 없다.

따라서 로컬에서 마우스 커서 데이터를 생성한 뒤, 서버로 데이터를 전송하는 과정이 필요하다.

이를 위해 마우스 커서 데이터를 전송하는 함수를 생성해줄 것이다.

 

가장 먼저 확인해야 할 것인 현재 Actor가 로컬에서 제어되고 있는지이다.

이를 위해 현재 Actor 정보를 가져오고, IsLocallyControlled() 함수를 사용하여 Local Control인지 체크한다.

Local Control이 아니라면 서버에서 처리해야하는 경우이기에 다른 처리가 필요하다.

 

우리는 GAS에서 Target Data를 서버에 전달하는 시스템을 이용하려는 것이기 때문에, 마우스 커서 정보를 어떤 Target Data 구조에 담을 것인지 생각해야 한다.

여기서 단일 Target Hit에 대한 Target Data인 FGameplayAbilityTargetData_SingleTargetHit을 사용할 것이다.

이름처럼 내부에 하나의 FHitResult를 가지고 있다.

여기에 기존에 우리가 Activate() 함수에서 구현했던 CursorHit 내용을 옮겨 저장해준다.

 

이렇게 얻은 Target Data는 ASC에 있는 ServerSetReplicatedTargetData 함수를 사용하여 서버로 전달할 것이다.

필요한 인자와 각 인자에 대한 내용은 다음과 같다.

FGameplayAbilitySpecHandle
-> 현재 실행 중인 Gameplay Ability가 어떤 Ability인지 식별하기 위한 Handle

Prediction Key
-> Gameplay Ability에서 클라이언트 예측을 수행할 때 사용히는 키(식별자)
-> Gameplay Ability가 처음 활성화될 때 사용된 Original Prediction Key 사용

Target Data Handle
-> Target Data를 담아 전달하기 위한 핸들, 별도의 Handle 변수를 만들어 담은 후 전달

Application Tag
-> 현재는 특별한 Tag를 사용하지 않기 떄문에, 비어있는 Gamepaly Tag 사용

 Current Prediction Key
 -> 현재 특정 작업에서 사용되는 Prediction Key, 현재 예측 키를 관리하는 ScopedPredictionKey 사용

 

서버로 Target Data를 전송했다고 해서 클라이언트에서 기존 Delegate Broadcast를 없애면 안 된다.

로컬 클라이언트에서도 마우스 커서 데이터를 이용하는 기능이 필요하기 때문에, 서버로 Target Data를 전송하는 것과 로컬 Delegate에도 Target Data를 Broadcast하는 작업 모두 수행해야 한다.

하지만 Ability Task가 이미 종료된 상태에서도 Target Data에 대한 Broadcast가 시도될 수 있으므로, Broadcast 전에 Ability Task가 유효한 상태인지 확인해야 한다.

 

기존 Delegate는 단순히 FVector를 전달하는 형태였다.

하지만 이제는 서버로 보내기 위해 생성한 Target Data Handle 자체를 활용하는 것이 더 적합하기 때문에 내용을 바꿔주자.

 

ServerSetReplicatedTargetData()에는 Current Prediction Key가 필요하며, 현재 Ability System Component에는 ScopedPredictionKey가 존재한다. 이 값을 Current Prediction Key로 전달할 수 있지만, 먼저 현재 작업에서 사용할 Prediction Key를 설정해야 한다.

 

따라서 마우스 커서 데이터를 전송하는 함수의 시작 부분에서 FScopedPredictionWindow를 생성한다. 이는 Target Data를 생성하고 서버로 전송하는 현재 작업 범위를 하나의 Prediction Context로 묶고, 해당 작업에서 사용할 Prediction Key를 설정하기 위한 것이다.

 

즉, ScopedPredictionWindow를 생성하여 현재 작업에 사용할 Prediction Key를 설정한 뒤, ASC의 ScopedPredictionKey를 Current Prediction Key로 사용한다.