Обновление виджета на сервере прослушивания UE C ++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Обновление виджета на сервере прослушивания UE C ++

Сообщение Anonymous »

Я на самом деле пытаюсь создать лоббистскую систему в C ++ с Unreal, но на самом деле я сталкиваюсь с огромной проблемой. Он отлично работает на клиентах, но виджет по -прежнему остается неизменным на сервере прослушивания. < /P>
void ALobbyGamemMode::UpdatePlayerInfo(APlayerController* RequstingPlayerController)
{
if (!RequstingPlayerController) return;

ALobbyPlayerController* LPC = Cast(RequstingPlayerController);
if (!LPC) return;

// Find the slot for the requesting player
for (auto PS : PlayerSlots)
{
if (PS && PS->GetPC() == RequstingPlayerController)
{
// Create the updated player info
FPLayerInfo NewInfo;
if (RequstingPlayerController->PlayerState)
{
NewInfo = FPLayerInfo(RequstingPlayerController,
FText::FromString(RequstingPlayerController->PlayerState->GetPlayerName()),
LPC->GetPlayerInfo().bIsReady,
RequstingPlayerController->PlayerState);
}

LPC->PlayerInfo = NewInfo;
LPC->ForceNetUpdate();

LPC->OnRep_PlayerInfo();

// Update THIS player's character widget
if (PS->GetSelectedCharacter())
{
PS->GetSelectedCharacter()->UpdatePlayerInfo(NewInfo);
UE_LOG(LogTemp, Warning, TEXT("Updated character info for %s - Ready: %s"),
*RequstingPlayerController->GetName(),
NewInfo.bIsReady ? TEXT("Ready") : TEXT("Not Ready"));
}

// BROADCAST: Send this player's info to ALL OTHER PLAYERS
for (auto OtherPC : Controllers)
{
if (OtherPC)
{
ALobbyPlayerController* OtherLPC = Cast(OtherPC);
if (OtherLPC)
{
OtherLPC->Client_UpdateCharacterWidget(NewInfo);
}
}
}
if (ALobbyPlayerController* ServerLPC = Cast(RequstingPlayerController))
{
if (ServerLPC->IsLocalController()) // This is the server’s own controller
{
APawn* Pawn = ServerLPC->GetPawn();
if (Pawn)
{
if (AThirdPersonneCharacter* CharPawn = Cast(LPC->GetPawn()))
{
CharPawn->SetPlayerInfo(NewInfo);
};
}
}
}
CheckAllPlayersReady();
break;
}
}
}
< /code>
void AThirdPersonneCharacter::OnRep_PlayerInfo()
{

if (!PlayerInfoWidgetComponent)
{
UE_LOG(LogTemp, Error, TEXT("PlayerInfoWidgetComponent is NULL on %s"), *GetName());
return;
}

UUserWidget* Widget = PlayerInfoWidgetComponent->GetUserWidgetObject();
UPlayerInfoWidget* InfoWidget = Cast(Widget);

if (InfoWidget)
{
InfoWidget->UpdatePlayerInfo(PlayerInfo);
PlayerInfoWidgetComponent->SetVisibility(true);
UE_LOG(LogTemp, Log, TEXT("Updated PlayerInfo on %s"), *GetName());
}
else
{
UE_LOG(LogTemp, Warning, TEXT("OnRep_PlayerInfo: Widget not yet created for %s"), *GetName());
}

}


Подробнее здесь: https://stackoverflow.com/questions/797 ... erver-ue-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»