Я на самом деле пытаюсь создать лоббистскую систему в 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
Обновление виджета на сервере прослушивания UE C ++ ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1757939308
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());
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79765135/widget-update-on-listen-server-ue-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия