基于EOS的C++多人游戏:获取当前执行代码的PlayerController设置输入模式
针对EOS多人游戏的PlayerController获取修改方案
在多人游戏场景下,GetFirstPlayerController()仅能返回世界中第一个加载的玩家控制器,无法准确指向当前执行代码的玩家。以下是不同代码上下文下的修改方案:
1. 代码位于APlayerController子类中
如果这段逻辑是直接写在玩家控制器类内部,无需额外获取,直接使用当前实例即可:
// 直接调用当前PlayerController的方法 SetInputMode(FInputModeGameOnly()); bShowMouseCursor = false;
2. 代码位于APawn子类(玩家角色)中
通过角色的GetController()方法转换为APlayerController:
APlayerController* PlayerController = Cast<APlayerController>(GetController()); if (PlayerController) { PlayerController->SetInputMode(FInputModeGameOnly()); PlayerController->bShowMouseCursor = false; }
3. 代码位于UUserWidget子类(UI组件)中
UI组件可通过GetOwningPlayer()直接获取所属玩家的控制器:
APlayerController* PlayerController = GetOwningPlayer(); if (PlayerController) { PlayerController->SetInputMode(FInputModeGameOnly()); PlayerController->bShowMouseCursor = false; }
4. 代码位于其他Actor类(客户端侧逻辑)
如果是客户端执行的逻辑,使用GetFirstLocalPlayerController()获取本地玩家控制器,比GetFirstPlayerController()更适配多人场景:
APlayerController* PlayerController = GetWorld()->GetFirstLocalPlayerController(); if (PlayerController) { PlayerController->SetInputMode(FInputModeGameOnly()); PlayerController->bShowMouseCursor = false; }
5. 通过EOS用户ID匹配PlayerController
如果需要基于EOS用户标识定位玩家,可遍历世界中的PlayerController,对比PlayerState中的EOS唯一ID:
// 先获取当前执行代码的EOS用户ID(从EOS登录/会话信息中获取) FEOSUniqueNetId CurrentEOSUserId = ...; for (FConstPlayerControllerIterator It = GetWorld()->GetPlayerControllerIterator(); It; ++It) { APlayerController* PlayerController = It->Get(); if (!PlayerController) continue; APlayerState* PlayerState = PlayerController->PlayerState; if (!PlayerState) continue; FEOSUniqueNetId* EOSId = Cast<FEOSUniqueNetId>(PlayerState->GetUniqueId().Get()); if (EOSId && *EOSId == CurrentEOSUserId) { PlayerController->SetInputMode(FInputModeGameOnly()); PlayerController->bShowMouseCursor = false; break; } }
注意事项
- 输入模式切换属于客户端本地操作,应确保代码在客户端执行,避免在服务器直接修改PlayerController的输入状态;如果是服务器触发的逻辑,需通过RPC通知对应客户端执行。
- 多人游戏中,避免依赖全局的"第一个玩家"这类模糊定位,优先通过上下文关联(如自身实例、所属玩家、EOS用户ID)获取准确的PlayerController。
内容的提问来源于stack exchange,提问作者AlexDevelopment1009
相关产品推荐
相关产品推荐

