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

Netcode for GameObjects Boss Room 多人RPG战斗(18)

Action系统中的Input处理流程

1. 客户端输入捕获

在Boss Room项目中,客户端的输入捕获主要由ClientInputSender.cs类负责。该类使用Unity的Input系统在Update()方法中监听各种输入事件:

  • 键盘输入:监听数字键1-8,分别对应不同的技能和表情动作
  • 鼠标输入:监听左键(移动)和右键(技能1/目标操作)
  • UI输入:处理来自UI元素的输入事件

当检测到有效输入时,会调用RequestAction()方法将输入请求放入队列中等待处理。

2. 输入处理与转换

输入请求在FixedUpdate()方法中被处理,主要流程如下:

  1. 请求队列处理:按FIFO顺序处理输入请求
  2. 技能触发判断:检查技能是否可以释放(冷却时间、资源等)
  3. 输入类型适配:根据输入触发方式(键盘、鼠标、UI等)构建不同的动作请求数据
  4. 目标选择:确定技能的目标(如果需要)

核心方法PerformSkill()是所有输入驱动技能的公共入口,它根据输入类型和技能配置构建ActionRequestData对象。

3. 目标选择与上下文处理

在构建动作请求时,系统会根据目标类型和上下文信息进行智能处理:

  • 目标检测:通过射线检测或网络对象ID查找目标
  • 上下文适配:例如,右键点击倒地的队友会自动将普通攻击转换为复活技能
  • 目标验证:确保目标是有效的(存在且在可攻击范围内)

GetActionRequestForTarget()方法处理复杂的目标选择逻辑,包括:

  • 检查目标是否存在且有效
  • 根据目标状态(如倒地的队友)动态修改技能ID
  • 记录目标信息用于后续动作执行

4. 动作请求发送

当动作请求数据构建完成后,SendInput()方法将通过ServerPlayActionRpc远程调用将请求发送到服务器:

voidSendInput(ActionRequestDataaction){ActionInputEvent?.Invoke(action);m_ServerCharacter.ServerPlayActionRpc(action);}

5. 服务器端处理

服务器接收动作请求后,由ServerCharacter.csServerActionPlayer.cs协同处理:

  1. 请求验证:检查角色是否存活且可以执行动作
  2. 动作创建:使用ActionFactory.CreateActionFromData()创建动作实例
  3. 动作队列管理:将新动作添加到队列中
  4. 动作合成:根据动作配置合成额外的辅助动作(如追逐或目标选择动作)

核心方法PlayAction()处理动作的添加和队列管理:

publicvoidPlayAction(refActionRequestDataaction){if(!action.ShouldQueue&&m_Queue.Count>0&&(m_Queue[0].Config.ActionInterruptible||m_Queue[0].Config.CanBeInterruptedBy(action.ActionID))){ClearActions(false);}varnewAction=ActionFactory.CreateActionFromData(refaction);m_Queue.Add(newAction);if(m_Queue.Count==1){StartAction();}}

6. 动作执行

动作执行由ServerActionPlayer管理,主要流程包括:

  1. 动作启动:调用
http://www.cnnetsun.cn/news/116549.html

相关文章:

  • Netcode for GameObjects Boss Room 多人RPG战斗(19)
  • 深度学习优化器算法巧思速览
  • macOS上优雅运行Docker容器
  • XXL-JOB分布式任务调度
  • MYSQL与B+树与索引相关面试题
  • PostgreSQL pgvector扩展Windows环境完整安装指南
  • Steam游戏挂机神器:3分钟学会自动刷时长和交易卡
  • F5 Big-IP by SNMP.硬件负载均衡
  • 公有云省钱 + 稳业务秘诀!自动伸缩 1 节课上手,资源不浪费、高峰不卡顿~(4)
  • EmotiVoice WebSocket接口设计与调用示例
  • 基于51单片机的颜色识别报站系统设计
  • 3个关键策略解决Cocos事件响应混乱问题
  • DuckDB C++集成:如何在嵌入式项目中实现高性能数据分析?
  • 移动端集成EmotiVoice:Android/iOS兼容方案
  • Feishin音乐播放器完全手册:打造个性化自托管音乐云
  • Launcher3 启动器:打造纯净原生 Android 体验的完整指南
  • 同花顺问财数据获取:Python自动化工具的完整使用指南
  • 【完整指南】快速掌握ComfyUI-SeedVR2视频超分模块
  • 大模型重塑知识图谱构建全面解析LLMs驱动的知识工程新范式!
  • 云存储安全防线:OSS防御体系构建与实战策略
  • SUNNOD喷墨打印机防堵头测试色卡:专业维护解决方案
  • 通义千问3-VL-Plus - 界面交互(本地图片)
  • 使用C#代码更改 PowerPoint 幻灯片大小
  • 基于单片机的智能电动车设计
  • Shipit自动化部署终极指南:从零到精通完整教程
  • Freedom Chat | 这款美国通讯应用泄露了所有人的电话号码
  • JMeter 二次开发环境准备详解
  • OkHttp跨平台网络开发实战指南:从架构原理到性能优化
  • 2025有哪些免费降ai率工具?有哪些免费AI率查重工具?
  • 大模型应用开发-Langchain(V1-最新版)-上