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

Unity新输入系统迁移问题:重写玩家控制器后角色无法移动

问题排查与修复方案

核心bug:读取了输入却没实际使用

你在Update里已经通过_input.Player.Move.ReadValue<Vector2>()拿到了玩家的移动输入,但MoveNick方法里根本没用到这个传入的moveDirectrion,反而一直在用没赋值的_horizontalInput和_verticalInput——这俩变量默认是0,角色当然动不了。

修复代码

把传入的输入值用上就行,直接修改MoveNick方法:

private void MoveNick(Vector2 moveDirectrion)
{
    if (GameFlow.isMovementFreezed)
    {
        _animator.SetInteger("UpDown", 0);
        _animator.SetInteger("Side", 0);
        return;
    }

    // 从传入的输入方向里提取横竖轴的值
    float horizontal = moveDirectrion.x;
    float vertical = moveDirectrion.y;

    Vector2 position = _rigidbody2d.position;
    position.x += _speed * horizontal * Time.deltaTime;
    position.y += _speed * vertical * Time.deltaTime;
    
    _animator.SetInteger("UpDown", vertical < 0 ? -1 : (int)Math.Ceiling(vertical));
    _animator.SetInteger("Side", horizontal < 0 ? -1 : (int)Math.Ceiling(horizontal));
    
    _rigidbody2d.MovePosition(position);
}

嫌麻烦的话也可以直接简化位置计算:

position += _speed * moveDirectrion * Time.deltaTime;

额外要检查的地方

  • 确认GameFlow.isMovementFreezed是不是被误设成true了,要是这个值为真,移动逻辑会直接跳过。
  • 检查Input System的自动生成类:你用的InputSystem必须是Unity根据你的Input Action Asset自动生成的(创建Asset时要勾选Generate C# Class),不然输入读取会失效。
  • 看Rigidbody2D的设置:确保Body Type是Dynamic,别设成Kinematic或Static;也检查下有没有其他脚本锁了角色位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:05:01