实现玩家分层状态机后,状态脚本无法获取状态管理器变量更新值
问题根源与解决方案
问题出在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
相关产品推荐
相关产品推荐

