角色无法正确朝向鼠标光标:动画异常问题求助
角色朝向鼠标光标功能异常问题排查
尝试实现角色朝向鼠标光标的功能,但该功能运行异常且效果不稳定。以下是相关代码:
if (CanDirectionChange) { Direction.x = Input.GetAxisRaw("Horizontal"); Direction.y = Input.GetAxisRaw("Vertical"); Anim.SetFloat("X", MousePos.x); Anim.SetFloat("Y", MousePos.y); Anim.SetFloat("Speed", Direction.sqrMagnitude); if (MousePos.x >= 1 || MousePos.x >= -1 || MousePos.y <= 1 || MousePos.y <= -1) { Anim.SetFloat("LastX", MousePos.x); Anim.SetFloat("LastY", MousePos.y); } }
角色的朝向由LastX和LastY参数控制,Animator状态机设置如图:

问题分析与修复方案
核心问题
代码中的条件判断逻辑完全错误:MousePos.x >= 1 || MousePos.x >= -1 这个表达式对任何数值都成立(因为任何数要么大于等于1,要么大于等于-1),再加上MousePos.y <=1 || MousePos.y <=-1同样全成立,导致LastX和LastY每一帧都被强制更新,这会让角色朝向频繁跳动,出现不稳定的情况。
修复步骤
修正条件判断
改为判断鼠标方向向量的绝对值是否超过合理阈值(比如0.1,避免微小误触导致频繁更新),只有当鼠标有明显方向输入时才更新朝向记录:// 判断鼠标方向是否有有效输入 if (Mathf.Abs(MousePos.x) >= 0.1f || Mathf.Abs(MousePos.y) >= 0.1f) { Anim.SetFloat("LastX", MousePos.x); Anim.SetFloat("LastY", MousePos.y); }确保MousePos是正确的方向向量
确认MousePos是角色到鼠标的归一化方向向量,而非原始屏幕坐标。如果当前是直接使用屏幕坐标,需要先转换:// 示例:将鼠标屏幕坐标转换为世界坐标,计算相对于角色的方向 Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); mouseWorldPos.z = transform.position.z; // 保持和角色同一平面 Vector2 mouseDir = (mouseWorldPos - transform.position).normalized; // 使用mouseDir作为MousePos的值 Anim.SetFloat("X", mouseDir.x); Anim.SetFloat("Y", mouseDir.y);优化朝向逻辑(可选)
如果需要角色持续朝向鼠标,不需要仅在满足条件时更新LastX/LastY,可以直接每一帧用当前鼠标方向更新这两个参数;若要在角色停止移动时保持最后朝向,则保留条件判断即可。
内容的提问来源于stack exchange,提问作者Aseed Kid
相关产品推荐
相关产品推荐

