2026/1/14 17:38:01
网站建设
项目流程
电商网站首页字体,公司名称及网址,珠海网站建设熊掌号,自己制作网站的软件Action系统中的Input处理流程
1. 客户端输入捕获
在Boss Room项目中,客户端的输入捕获主要由ClientInputSender.cs类负责。该类使用Unity的Input系统在Update()方法中监听各种输入事件: 键盘输入:监听数字键1-8,分别对应不同的技能和表情动作 鼠标输入:监听左键(移动)…Action系统中的Input处理流程1. 客户端输入捕获在Boss Room项目中,客户端的输入捕获主要由ClientInputSender.cs类负责。该类使用Unity的Input系统在Update()方法中监听各种输入事件:键盘输入:监听数字键1-8,分别对应不同的技能和表情动作鼠标输入:监听左键(移动)和右键(技能1/目标操作)UI输入:处理来自UI元素的输入事件当检测到有效输入时,会调用RequestAction()方法将输入请求放入队列中等待处理。2. 输入处理与转换输入请求在FixedUpdate()方法中被处理,主要流程如下:请求队列处理:按FIFO顺序处理输入请求技能触发判断:检查技能是否可以释放(冷却时间、资源等)输入类型适配:根据输入触发方式(键盘、鼠标、UI等)构建不同的动作请求数据目标选择:确定技能的目标(如果需要)核心方法PerformSkill()是所有输入驱动技能的公共入口,它根据输入类型和技能配置构建ActionRequestData对象。3. 目标选择与上下文处理在构建动作请求时,系统会根据目标类型和上下文信息进行智能处理:目标检测:通过射线检测或网络对象ID查找目标上下文适配:例如,右键点击倒地的队友会自动将普通攻击转换为复活技能目标验证:确保目标是有效的(存在且在可攻击范围内)GetActionRequestForTarget()方法处理复杂的目标选择逻辑,包括:检查目标是否存在且有效根据目标状态(如倒地的队友)动态修改技能ID记录目标信息用于后续动作执行4. 动作请求发送当动作请求数据构建完成后,SendInput()方法将通过ServerPlayActionRpc远程调用将请求发送到服务器:voidSendInput(ActionRequestDataaction){ActionInputEvent?.Invoke(action);m_ServerCharacter.ServerPlayActionRpc(action);}5. 服务器端处理服务器接收动作请求后,由ServerCharacter.cs和ServerActionPlayer.cs协同处理:请求验证:检查角色是否存活且可以执行动作动作创建:使用ActionFactory.CreateActionFromData()创建动作实例动作队列管理:将新动作添加到队列中动作合成:根据动作配置合成额外的辅助动作(如追逐或目标选择动作)核心方法PlayAction()处理动作的添加和队列管理:publicvoidPlayAction(refActionRequestDataaction){if(!action.ShouldQueuem_Queue.Count0(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管理,主要流程包括:动作启动:调用