Unity Crouching w / State Machine Issue

时间:2018-01-24 08:20:48

标签: c# unity3d

所以,我在Unity中为我的播放器设置了状态机。我有一个Crouch状态和一个空闲状态。我希望玩家在我处于空闲状态时按下蹲伏按钮时蹲伏,当我蹲伏时我再次按下蹲伏按钮时返回空闲状态。问题(我认为)是当我按下蹲伏按钮时它会进入蹲伏状态,然后立即返回到空闲状态。我有另一个脚本,它根据玩家目前的状态检测每个状态并进行操作。解决这个问题的最佳方法是什么?这是我的代码:

// create date object from date + hour strings
var dateObj = moment.tz(date + hour, process.env.DATE_FORMAT + " HH:mm a", user_timezone);

1 个答案:

答案 0 :(得分:0)

问题是你有一系列if条件,在同一帧中都可以为真。

让我们看看一帧中发生了什么:

  • if (playerState == PlayerState.Idle)条件已经过验证。
  • 在此if声明中,if(Input.GetButtonDown("Crouch"))条件已经过验证,因此您的播放器会进入PlayerState.CrouchedIdle状态。
  • if (playerState == PlayerState.Walking)条件未经过验证,因此请跳到下一个。
  • if (playerState == PlayerState.Sprinting)条件未经过验证,因此请跳到下一个。
  • if(playerState == PlayerState.CrouchedIdle)条件已经过验证。
  • 在此if声明中,if(Input.GetButtonDown("Crouch"))条件已经过验证,因此您的播放器会再次进入PlayerState.Idle状态!
  • 最后,if(playerState == PlayerState.CrouchedWalking)条件未经过验证。

一种解决方案可能是使用一系列else if而不是if,这样你每帧只能改变一次状态(因为每帧只考虑一个条件)

我还建议查看用C#实现的状态机示例,以避免这种陷阱。