티스토리 뷰
Player Level and Combat Interface
저번 강의에서 언급했던 플레이어/적 모두 각자의 레벨을 조회할 수 있는 전투 인터페이스를 구축할 것이다.
플레이어의 경우에는 PalyerState에서, 적은 자기 자신에 레베을 저장하지만, 외부에서는 둘 다 동일하게 GetPlayerLEvel() 함수 호출을 통해 접근할 수 있도록 한다.
가장 먼저 PlayerState에 Level 변수부터 추가해주자.
그리고 해당 변수는 HUD, 갱신, UI 업데이트 등에 활용할 수 있도록 Replication 설정을 해줄 것이다.
이를 위해 복제됐을 때 호출할 OnRep 함수와, 복제할 변수들을 등록할 GetLifetimeReplicatedProps 함수를 재정의할 것이다.

여기서 사용된 DOREPLIFETIME은 가장 기본적인 리플리케이션 매크로로, 해당 변수가 네트워크 복제 대상임을 알린다.
OnRep 함수에서 이전 레벨 (OldLevel)을 받는 이유는 이를 통해 이전 레벨과 현재 레벨 비교가 가능해지기 때문이다.
따라서 이를 통해 1->2 레벨업이 이루어질 때 UI 애니메이션과 효과 재생 등이 가능해진다.

적의 경우에는 멀티(네트워크) 플레이를 고려해야하는 플레이어와 다르게, 적 자신이 직접 Level을 보유한다.
적의 Level에 대해서는 보통 서버에서만 수행되기에 Replicated을 할 필요가 없다.

지금 상태에서는 플레이어와 적의 Level 저장 위치가 다르다.
따라서 외부 시스템이 각각의 Level이 몇 인지 알고 싶을 때 복잡해진다.
이를 위해 공통 인터페이스를 제작하여 GetPlayerLevel() 함수만 호출하면 각자의 Level을 알 수 있도록 구조를 통합할 것이다.
따라서 Interface 클래스를 새롭게 생성해주자.

그리고 Level을 얻기 위한 함수를 생성하고, 필요 클래스만 override하여 사용하도록 할 것이다.


해당 인터페이스를 사용하기 위해 AuraCharacterBase에 인터페이스를 상속시켜주자.
플레이어와 적 모두 해당 클래스를 베이스로 하기 떄문에, 자동으로 모든 캐릭터가 인터페이스를 획득하게 된다.

그리고 이번엔 구현이 간단한 적 캐릭터 부터 GetLevel() 함수를 생성해주자.


플레이어는 직접 Level을 가진 것이 아니라, PlayerState에 있으므로 PlayerState에서 우선 Level에 대한 Getter 함수를 만들어줄 필요가 있다.
해당 Getter 함수는 매우 단순하므로, FORCEINLINE을 사용하여 함수 호출 비용을 줄이기 위한 최적화를 하였다.

그리고 PlayerState에서 Level을 얻기 위한 함수를 작성해주자.
이에 앞서서, 기존에는 GetLevel로 이름을 작성했지만, Actor 클래스에도 같은 이름의 함수가 있기 때문에 충돌을 피하기 위해 GetPlayerLevel()로 이름을 모두 바꿔주자.

앞서 언급했던 대로 Level이 PlayerState에 있기 때문에 우선 PlayerState에 접근하여 이를 통해 Getter 함수를 호출한다.

'Unreal > Udemy 강의' 카테고리의 다른 글
| Gameplay Ability System - Top Down RPG / Section 8-11 (0) | 2026.05.26 |
|---|---|
| Gameplay Ability System - Top Down RPG / Section 8-10 (0) | 2026.05.25 |
| Gameplay Ability System - Top Down RPG / Section 8-8 (0) | 2026.05.20 |
| Gameplay Ability System - Top Down RPG / Section 8-7 (0) | 2026.05.19 |
| Gameplay Ability System - Top Down RPG / Section 8-6 (0) | 2026.05.11 |
