当前位置: 首页 > news >正文

UnrealEngine中角色类型判断方法

角色类型判断方法

在Unreal Engine的网络架构中:

  1. 专用服务器(Dedicated Server):所有角色都有控制器(AI控制器或玩家控制器)
  2. 监听服务器(Listen Server):服务器同时也是一个客户端
  3. 客户端(Client):只有本地控制的角色有玩家控制器

正确的判断逻辑

voidUTargetDataUnderMouse::DetermineCharacterType(){if(AActor*AvatarActor=GetAvatarActor()){ENetRole LocalRole=AvatarActor->GetLocalRole();boolbHasAuthority=AvatarActor->HasAuthority();boolbIsLocallyControlled=false;if(APawn*Pawn=Cast<APawn>(AvatarActor)){bIsLocallyControlled=Pawn->IsLocallyControlled();}// 正确的判断逻辑:if(bHasAuthority){// 服务器端角色(专用服务器或监听服务器)if(bIsLocallyControlled){// 监听服务器:服务器同时是本地客户端UE_LOG(LogTemp,Warning,TEXT("监听服务器 - 本地控制角色"));}else{// 专用服务器:服务器端AI控制或远程玩家角色UE_LOG(LogTemp,Warning,TEXT("专用服务器 - 服务器端角色"));}}else{// 客户端if(bIsLocallyControlled){// 客户端本地控制的角色UE_LOG(LogTemp,Warning,TEXT("客户端 - 本地控制角色"));}else{// 客户端远程玩家控制的角色UE_LOG(LogTemp,Warning,TEXT("客户端 - 远程控制角色"));}}}}

更精确的专用服务器判断

voidUTargetDataUnderMouse::CheckForDedicatedServer(){if(AActor*AvatarActor=GetAvatarActor()){// 判断是否是专用服务器环境boolbIsDedicatedServer=IsRunningDedicatedServer();// 或者通过World判断UWorld*World=GetWorld();if(World){ENetMode NetMode=World->GetNetMode();bIsDedicatedServer=(NetMode==NM_DedicatedServer);}if(bIsDedicatedServer){// 专用服务器环境if(AvatarActor->HasAuthority()){UE_LOG(LogTemp,Warning,TEXT("专用服务器 - 权威角色"));}}}}

在TargetDataUnderMouse中的实际应用

在你的代码中,可以在以下关键位置进行判断:

voidUTargetDataUnderMouse::SendMouseCursorData(){// 只在本地控制的客户端发送鼠标数据if(AActor*AvatarActor=GetAvatarActor()){if(APawn*Pawn=Cast<APawn>(AvatarActor)){if(!Pawn->IsLocallyControlled()){// 不是本地控制的角色,不发送鼠标数据return;}}// 继续发送鼠标数据的逻辑...}}

关键概念澄清

  • 专用服务器(Dedicated Server)NetMode == NM_DedicatedServer
  • 监听服务器(Listen Server)NetMode == NM_ListenServer
  • 权威控制(Authority)HasAuthority() == true
  • 本地控制(Locally Controlled)IsLocallyControlled() == true

总结

正确的判断流程应该是:

  1. 先判断网络模式(专用服务器/监听服务器/客户端)
  2. 再判断权威性(HasAuthority()
  3. 最后判断本地控制(IsLocallyControlled()

这样就能准确区分各种情况下的角色类型了。感谢你的指正!

http://www.cnnetsun.cn/news/139814.html

相关文章:

  • vue导出excel文件
  • 基于STM32的自动售货机控制系统设计
  • 液压挖掘机回转能量回收系统设计与仿真
  • android 媒体之 MediaSession
  • 校园网络规划
  • 护眼灯已足够优秀,为何仍需眼调节训练灯?答案藏在近视防控里
  • Visual Studio中的多态
  • MindSpore硬核实战:彻底搞懂自动混合精度(AMP)与函数式训练
  • Java异常处理详解。零基础小白到精通,收藏这篇就够了
  • 基于深度学习YOLOv12的犬种识别检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
  • 基于深度学习YOLOv11的犬种识别检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
  • [插电式混合动力车辆][交替方向乘子法(ADMM)结合CVX]插电式混合动力车辆的能源管理:基于凸优化算法用于模型预测控制MPC研究附Matlab代码
  • 【别花冤枉钱】学生党专享!2025年把AI率90%降到10%的“低成本”组合拳(含免费/付费工具避坑指南)
  • 前端Vue制作日历插件FullCalendar,零基础入门到精通,收藏这篇就够了
  • 基于MPC算法的P2构型混合动力汽车能量管理优化策略
  • 德克萨斯大学奥斯汀分校突破:球形利奇量化提升AI图像生成质量
  • 13、Unix 系统管理脚本实用指南(上)
  • 2026网络安全薪酬全景:哪些岗位是价值洼地,哪里又是薪资天花板?
  • Oracle领衔科技巨头5000亿美元AI数据中心租赁狂潮
  • Java算法——排序篇之快速排序,零基础小白到精通,收藏这篇就够了
  • 平安好医生:“人+机+生态”闭环 打造中国AI医疗标杆
  • Compose 适配 - 全屏显示 EdgeToEdge
  • python-flask-django重症监护室中急诊护理管理系统设计与实现_zjv2nt1d
  • 拿一句,逗得你家男人哭笑不得
  • 虎贲等考 AI:AI 赋能学术全流程,让论文写作从 “煎熬” 到 “高效”✨
  • 介观交通流仿真软件:VISSIM (介观模式)_(5).车辆行为模型
  • 英特尔酷睿Ultra第三代,如何推动AI PC规模化落地?
  • 15、密码学编程问题与解决方案
  • 【花雕学编程】Arduino BLDC 之基础差速转向小车(串口控制)
  • 【毕业设计】基于springboot+Android的研学旅行服务平台APP小程序设计(源码+文档+远程调试,全bao定制等)