Why is there no on possessed event for client?
void APlayerController::OnPossess(APawn* PawnToPossess)
{
...
SetPawn(PawnToPossess);
...
}
void APlayerController::SetPawn(APawn* InPawn)
{
...
Super::SetPawn(InPawn); // APlayerController의 Super는 AController
...
}
void AController::SetPawn(APawn* InPawn)
{
RemovePawnTickDependency(Pawn);
Pawn = InPawn;
Character = (Pawn ? Cast<ACharacter>(Pawn) : NULL);
// 만약 해당 객체가 Character라면 저장해준다.
AttachToPawn(Pawn);
AddPawnTickDependency(Pawn);
}
UPROPERTY(replicatedUsing=OnRep_Pawn)
TObjectPtr<APawn> Pawn;
void AController::OnRep_Pawn()
{
APawn* StrongOldPawn = OldPawn.Get();
// Detect when pawn changes, so we can NULL out the controller on the old pawn
if ((StrongOldPawn != nullptr) && (Pawn != StrongOldPawn) && (StrongOldPawn->Controller == this))
{
// Set the old controller to NULL, since we are no longer the owner, and can't rely on it replicating to us anymore
StrongOldPawn->Controller = nullptr;
}
OldPawn = Pawn;
SetPawn(Pawn);
// 서버에선 이미 실행된 함수, 리플리케이션 노티파이 함수는
// 서버에서 호출명령은 내려도 서버에선 실제로 실행되지 않는다.
if (StrongOldPawn != Pawn)
{
OnPossessedPawnChanged.Broadcast(StrongOldPawn, Pawn);
}
}