Unreal Engine
UE5 PossessedBy() 와 OnRep_ 함수
띠애모
2024. 7. 25. 16:19
OnRep_PlayerState()과 OnRep_Controller()
OnRep_PlayerState() 함수는 언리얼 엔진 4 (UE4) 및 5 (UE5)에서 APlayerController 클래스의 멤버 함수로, 플레이어의 상태(PlayerState)가 네트워크 복제(replication)에 의해 업데이트될 때 호출됩니다. 이 함수는 서버에서 클라이언트로 플레이어 상태가 변경될 때 자동으로 호출되어, 클라이언트에서 플레이어 상태가 변경되었음을 알리고 필요한 처리를 수행할 수 있게 합니다.
기본적인 사용 방법
언리얼 엔진에서 OnRep_로 시작하는 함수는 해당 변수의 ReplicatedUsing 속성에 의해 지정된 변수의 변경을 감지합니다. APlayerController 클래스에서는 PlayerState 변수가 네트워크 복제될 때 OnRep_PlayerState() 함수가 호출됩니다.
예제 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include "GameFramework/PlayerController.h"
#include "MyPlayerController.generated.h"
UCLASS()
class MYGAME_API AMyPlayerController : public APlayerController
{
GENERATED_BODY()
protected:
virtual void BeginPlay() override;
private:
UFUNCTION()
void OnRep_PlayerState() override;
};
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include "MyPlayerController.h"
void AMyPlayerController::BeginPlay()
{
Super::BeginPlay();
// 초기화 코드
}
void AMyPlayerController::OnRep_PlayerState()
{
Super::OnRep_PlayerState();
// PlayerState가 변경될 때 수행할 코드
UE_LOG(LogTemp, Log, TEXT("PlayerState has been replicated."));
}
|
cs |
함수 동작 원리
- 서버 측 변경: 서버에서 PlayerState가 변경되면, 변경된 정보가 네트워크를 통해 클라이언트에 전송됩니다.
- 클라이언트 측 업데이트: 클라이언트는 수신한 정보를 기반으로 PlayerState를 업데이트하고, OnRep_PlayerState() 함수를 호출합니다.
- 커스터마이징: 이 함수 내에서 클라이언트에서 플레이어 상태가 변경될 때 수행해야 할 작업(예: UI 업데이트, 게임 로직 처리 등)을 정의할 수 있습니다.
실사용 예
- UI 업데이트: 플레이어의 점수나 상태가 변경될 때 이를 화면에 표시하기 위해 UI를 업데이트합니다.
- 게임 로직 처리: 플레이어 상태에 따른 특정 게임 로직을 처리합니다.
- 애니메이션 변경: 플레이어 상태에 따라 애니메이션을 변경하거나 특정 액션을 트리거합니다.
PossessedBy()
ACharacter::PossessedBy() 함수는 언리얼 엔진의 ACharacter 클래스에서 플레이어 또는 AI가 캐릭터를 소유할 때 호출되는 함수입니다. 이 함수는 주로 서버에서 호출되며, 캐릭터가 새로운 컨트롤러에 의해 소유될 때 필요한 초기화 작업을 수행합니다.
기본 개념
- Possession: 게임에서 "소유"는 특정 플레이어 또는 AI 컨트롤러가 캐릭터를 제어하게 되는 것을 의미합니다. 예를 들어, 플레이어가 캐릭터를 조종하기 위해 로그인하면, 플레이어의 컨트롤러가 해당 캐릭터를 소유하게 됩니다.
- Controller: 컨트롤러는 플레이어 입력을 처리하고 캐릭터의 행동을 결정하는 역할을 합니다. 플레이어 컨트롤러 (APlayerController)와 AI 컨트롤러 (AAIController)가 있습니다.
PossessedBy() 함수의 역할
PossessedBy() 함수는 새로운 컨트롤러가 캐릭터를 소유할 때 호출되며, 주로 다음과 같은 작업을 수행합니다:
- 컨트롤러 설정: 캐릭터에 새로운 컨트롤러를 할당합니다.
- 네트워크 동기화: 멀티플레이어 게임에서 서버와 클라이언트 간의 소유 정보와 상태를 동기화합니다.
- 초기화 작업: 캐릭터와 관련된 초기화 작업을 수행합니다. 예를 들어, 캐릭터의 상태를 초기화하거나, 특정 액터에 대한 참조를 설정할 수 있습니다.
주의사항
- Super 호출: 기본 클래스의 PossessedBy() 함수 호출을 통해 기본 동작을 유지해야 합니다. 이는 기본 클래스가 수행하는 필수 작업을 보장합니다.
- 컨트롤러 타입 확인: 새로운 컨트롤러가 플레이어 컨트롤러인지 AI 컨트롤러인지 확인하여 각기 다른 초기화 작업을 수행할 수 있습니다.
- 네트워크 게임: 네트워크 게임에서 소유권 변경 시 서버와 클라이언트 간의 동기화가 중요합니다. 이 함수는 주로 서버에서 호출되지만, 클라이언트에서 상태를 업데이트할 필요가 있을 수 있습니다.
이와 같이 PossessedBy() 함수는 캐릭터가 새로운 컨트롤러에 의해 소유될 때 필요한 초기화 작업을 처리하는 데 사용됩니다. 이를 통해 캐릭터와 컨트롤러 간의 원활한 상호작용을 보장할 수 있습니다.