You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity 3D俯视角角色移动RayCastHit检测隔次失效求助

问题原因分析

你的代码核心问题是输入判断的逻辑顺序和覆盖问题:

  • 当你按A键(Horizontal<0)时,第一个if块会正确设置XMovement,但紧接着的第二个判断Horizontal>0的else分支,会直接把XMovement重新赋值为0,覆盖了之前的结果。
  • 同理,按S键(Vertical<0)时,第三个if块设置的ZMovement,会被第四个判断Vertical>0的else分支清零。
    这就导致只有D键(第二个判断)和W键(第四个判断)能正常生效,正好对应你说的“每隔一个输入判断生效”的现象。

另外,Raycast的变量复用虽然不是直接原因,但每个检测用独立的变量会更清晰,避免潜在的状态污染。

修复后的代码
[SerializeField] private float speed = 5f;
private float _xMovement;
private float _zMovement;

void FixedUpdate()
{
    MovementSetting();
    var dir = new Vector3(_xMovement, 0f, _zMovement);
    transform.Translate(dir * speed * Time.deltaTime, Space.Self);
}

void MovementSetting()
{
    // 先获取原始输入值
    float horizontalInput = Input.GetAxis("Horizontal");
    float verticalInput = Input.GetAxis("Vertical");

    _xMovement = horizontalInput;
    _zMovement = verticalInput;

    // 处理水平方向的射线检测
    if (horizontalInput != 0)
    {
        Vector3 rayDir = horizontalInput < 0 ? transform.TransformDirection(Vector3.left) : transform.TransformDirection(Vector3.right);
        Ray ray = new Ray(transform.position, rayDir);
        
        if (Physics.Raycast(ray, out RaycastHit hit, 0.6f))
        {
            _xMovement = 0f;
        }
    }

    // 处理垂直方向的射线检测
    if (verticalInput != 0)
    {
        Vector3 rayDir = verticalInput < 0 ? transform.TransformDirection(Vector3.back) : transform.TransformDirection(Vector3.forward);
        Ray ray = new Ray(transform.position, rayDir);
        
        if (Physics.Raycast(ray, out RaycastHit hit, 0.6f))
        {
            _zMovement = 0f;
        }
    }
}
关键优化点
  • 先统一获取输入值,再做射线检测,避免后续的else分支覆盖之前的有效赋值。
  • 合并水平/垂直方向的判断,减少冗余代码,逻辑更清晰。
  • 使用私有变量(_xMovement)代替公共变量,符合代码封装规范。
  • 明确指定Translate的Space为Self,避免因为场景坐标系导致的移动异常(俯视角游戏通常用自身坐标系移动)。
额外调试建议

如果射线检测还是有问题,可以在Raycast的位置添加调试绘制:

Debug.DrawRay(ray.origin, ray.direction * 0.6f, Color.red);

这样你能在Scene视图中看到射线的实际方向和长度,快速排查是否是射线方向或长度设置错误。

内容的提问来源于stack exchange,提问作者HarryMA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:45:54