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

实现玩家分层状态机后,状态脚本无法获取状态管理器变量更新值

问题根源与解决方案

问题出在PlayerStateMachine.Update()方法的执行顺序错误:你先调用状态的更新逻辑,再去更新共享变量(方向、是否接地等),导致状态读取的变量始终是上一帧的旧值(首次执行时即为默认值)。

修改方案

调整PlayerStateMachine.Update()中的代码顺序,先完成所有共享变量的更新,再执行状态的更新逻辑:

private void Update()
{
    // 1. 先更新所有共享上下文变量
    // 检查玩家是否接地
    _isGrounded = IsGrounded();

    // 获取移动方向向量
    GetDirectionVector();
    DashHandler(); // 允许在任意状态下冲刺

    Debug.Log(direction + "; " + isGrounded);

    // 2. 再执行状态的更新逻辑
    currentState.UpdateStates();
}

验证说明

修改后,状态脚本(如PlayerGroundingState)中通过_context.direction、_context.isGrounded访问的变量,就能获取到当前帧最新的更新值,不会再停留在默认值。后续若新增其他共享变量的更新逻辑,也需放在状态更新步骤之前执行,确保状态能拿到最新的上下文数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:35:18