news 2026/10/15 1:05:57

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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.cs和ServerActionPlayer.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. 动作启动:调用
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 14:58:04

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

ActionPlayers ActionPlayers是Boss Room项目中负责管理和执行动作(Action)的核心组件,分为客户端和服务器端两个版本,分别处理动作的视觉表现和逻辑执行。 1. 系统架构 1.1 核心组件 组件 职责 位置 ClientActionPlayer 客户端动作可视化与生命周期管理 Assets/Scripts/G…

作者头像 李华
网站建设 2026/10/14 5:19:02

深度学习优化器算法巧思速览

1. 为什么要研究优化器算法?它的关联问题:训练为什么要调参,调的是什么参?如果就这个问题去问各种大语言模型,它们能给出一堆的理由。但就博主而言,答案只有一个:干掉调参,解放生产力…

作者头像 李华
网站建设 2026/10/13 20:31:35

macOS上优雅运行Docker容器

什么是colimacolima主页Colima(Container on Lima)是一个轻量级的容器运行时管理工具,专为macOS(同时也支持Linux)设计,提供了一种简单优雅的方式来运行容器。它基于Lima项目,后者为macOS提供了…

作者头像 李华
网站建设 2026/10/14 21:54:20

XXL-JOB分布式任务调度

1.什么是任务调度 简单说:按照指定的规则(时间、频率、条件)自动执行某个任务,不需要人工手动触发。比如: 每天凌晨 2 点执行数据备份;每 5 分钟检查一次接口可用性;订单支付超时(30…

作者头像 李华
网站建设 2026/10/15 2:02:09

MYSQL与B+树与索引相关面试题

第一题(基础):请简述 MySQL 中索引底层为什么选择 B 树,而不是 B 树、红黑树等其他数据结构?第二题(基础进阶):MySQL 中聚簇索引和非聚簇索引的区别是什么?它们的叶子节…

作者头像 李华
网站建设 2026/10/14 4:52:10

PostgreSQL pgvector扩展Windows环境完整安装指南

PostgreSQL pgvector扩展Windows环境完整安装指南 【免费下载链接】pgvector Open-source vector similarity search for Postgres 项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector 在人工智能应用日益普及的今天,向量相似性搜索已成为现代数据库…

作者头像 李华