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

Unity3D新InputSystem行走时按奔跑键不触发奔跑状态问题如何解决

问题根因

你当前的逻辑只有在movementInput(A/D键)的状态变化时才会调用OnMove执行移动逻辑。按奔跑键Z的时候只会修改isRunning的布尔值,不会主动触发移动逻辑的重新计算,所以状态不会即时更新,只有再次触发A/D的输入事件才会读取新的isRunning值。


解决方案1:奔跑输入触发时主动调用移动逻辑(改动最小)

在奔跑输入的回调里,修改完isRunning之后,主动读取当前的移动输入值,执行一次移动逻辑:

private InputAction movementInput, runInput;
private bool isRunning;

private void Awake()
{
    movementInput.performed += context => OnMove(context.ReadValue<float>());
    movementInput.canceled += context => OnMove(0);

    runInput.performed += context => 
    {
        isRunning = true;
        // 读取当前移动输入值,主动更新移动状态
        OnMove(movementInput.ReadValue<float>());
    };
    runInput.canceled += context => 
    {
        isRunning = false;
        OnMove(movementInput.ReadValue<float>());
    };
}

private void OnMove(float moveDir)
{
    if(!isRunning)
    {
        movementComponent.move(mySpriteRenderer, moveDir);
        Debug.Log("NotRunning");
    }
    else
    {
        movementComponent.run(mySpriteRenderer, moveDir);
        Debug.Log("Running");
    }
}

解决方案2:把移动逻辑放到Update中执行(更推荐,扩展性更强)

输入事件只负责更新状态值,实际的移动逻辑每帧根据最新的状态计算,后续如果新增其他影响移动的状态(比如硬直、跳跃、减速buff)都不用再改输入回调:

private InputAction movementInput, runInput;
private bool isRunning;
private float currentMoveDir; // 缓存当前移动方向

private void Awake()
{
    // 移动输入只负责更新缓存的方向值
    movementInput.performed += context => currentMoveDir = context.ReadValue<float>();
    movementInput.canceled += context => currentMoveDir = 0;

    // 奔跑输入只负责更新奔跑状态
    runInput.performed += context => isRunning = true;
    runInput.canceled += context => isRunning = false;
}

private void Update()
{
    // 每帧用最新的状态执行移动逻辑
    if(!isRunning)
    {
        movementComponent.move(mySpriteRenderer, currentMoveDir);
    }
    else
    {
        movementComponent.run(mySpriteRenderer, currentMoveDir);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:45:03