티스토리 뷰
Gameplay Ability System - Top Down RPG / Section 9-12
Just Move 2026. 7. 15. 01:53Code Clean Up
이번에는 새로운 기능을 추가하기 전에 직므까지 작성한 PlayerController 코드를 리팩토링해줄 것이다.
가장 먼저 Cursor HitResult 중복 계산을 제거한다.
지금은 마우스 왼쪽 버튼을 누르고 있는 동안 CursorTrace()에서 HitResult를 계산하고, 또 이후 AbilityInputTagHeld에서 다시 계산하는 과정이 반복된다.
따라서 CursorHit를 멤버 변수로 만들어서 사용할 것이다.



다음으로 CursorTrace() 함수에서 모든 경우의 수를 설명하기 위해 많은 If문을 작성했었다.
필요한 핵심은 현재 Actor와 이전 Actor가 같은지 아닌지 뿐이므로, 이를 기준으로 하이라이트 처리를 판단하는 부분만 남긴다.

AbilityInputTagReleased 함수에서 많은 if 문이 존재하는데, 여기서 내용이 한줄 인것도 중괄호로 처리해서 작성했었다.
이러한 부분은 if 문과 같이 1줄로 작성해도 무방하다.


이어서 해당 함수의 ControlledPawn 변수는 변경되지 않기에 const를 추가해주었다.
그리고 디버그 코드도 이젠 필요없기에 지워주자.

이 상태로 다시 컴파일하여 테스트하면 당연히 문제없이 기능이 정상적으로 동작한다.
다만 이전에 확인하지 못했던 문제가 하나 있는데, 하이템 습득시 HUD에 출력되는 획득 메시지가 서버에서는 보이는데 클라이언트에서는 보이지 않는 다는 것이다.
원인은 AbilitySystemComponent의 EffectApplied 콜백 함수이다.
해당 함수는 GameplayEffect가 적용될 때 호출되지만, Server에서만 호출되고 클라이언트에서는 호출되지 않는다.
따라서 해당 함수를 Client RPC로 바꿔주어야 한다.
Client RPC(Remote Procedure Call)
서버가 특정 클라이언트에게 "이 함수를 실행해라"라고 원격으로 명령하는 함수
함수를 서버에서 호출하지만, 실제 함수의 내용은 소유 클라이언트에서 실행
제일 먼저 함수명을 ClientEffectApplied()로 변경하여 명시해주고, UFUNCTION(Client, Reliable)을 선언하여 Client RPC로 지정한다.
Client는 서버에서 호출되어 소유 클라이언트에서 실행되는 RPC를 의미하며, Reliable은 RPC가 반드시 전달되도록 보장하는 전송 옵션이다.

그리고 구현부에서는 함수명에 추가로 Implementation()를 작성해주어야 한다.
이는 언리얼 RPC 시스템의 구현 규칙이다.

마지막으로 실제 적용되는 코드에서도 함수 이름을 변경한 이름에 맞게 설정해주자.

테스트의 경우 인원을 3명으로 하고, Listen Server로 설정하였다.

지금은 개별로 띄워진 클라이언트 창에서도 정상적으로 획득 문구가 출력되는 모습을 볼 수 있다.

'Study > [Unreal] Udemy 강의' 카테고리의 다른 글
| Gameplay Ability System - Top Down RPG / Section 9-14 (0) | 2026.07.17 |
|---|---|
| Gameplay Ability System - Top Down RPG / Section 9-13 (0) | 2026.07.16 |
| 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-9 (0) | 2026.07.12 |
