해결된 질문
작성
·
28
0
한바퀴 듣고 이제 데디케이트서버 환경에서 돌아가게 라이라 프로젝트도 참고하면서 다시 클론코딩 하고 있는데, 궁금한 점이 있습니다.
강의와 라이라 프로젝트에서 차이점이 있어서 고민을 해봤는데 잘 모르겠어요.
void ULyraPawnExtensionComponent::SetPawnData(const ULyraPawnData* InPawnData)
{
check(InPawnData);
APawn* Pawn = GetPawnChecked<APawn>();
if (Pawn->GetLocalRole() != ROLE_Authority)
{
return;
}
if (PawnData)
{
UE_LOG(LogLyra, Error, TEXT("Trying to set PawnData [%s] on pawn [%s] that already has valid PawnData [%s]."), *GetNameSafe(InPawnData), *GetNameSafe(Pawn), *GetNameSafe(PawnData));
return;
}
PawnData = InPawnData;
Pawn->ForceNetUpdate();
CheckDefaultInitialization();
}
강의랑 차이점은 Pawn->ForceNetUpdate, CheckDefaultInitialization 입니다.
넷 업데이트야 멀티플레이어 환경이라 강의에선 안 했지만 CheckDefaultInitialization는 라이라에서 왜 불러주는 걸까요? 이거 여기서 명시적으로 불러줘야 초기화 관리가 되는 걸까요?
BeginPlay에서도 부르고 SetupPlayerInputComponent, OnActorInitStateChanged에서도 어차피 부르고 있는데.
그냥 혹시 뭔 일이 있어서 초기화가 안 됐을 수도 있으니까 추가한 그런 느낌일까요?
답변 1
0
언리얼 데디케이트의 단점인데 리플리케이트의 경우 흐름 컨트롤을 완벽하게 할 수가 없습니다.
그래서 안전하게 다양한 곳에서 지속적으로 초기화 함수를 호출해준다라고 이해하시면 될 것 같아요.
PawnExtension #3에 바로 설명해주시네요... 감사합니다.