跳跃信号
要实现跳跃,首先要实现跳跃的输入。跳跃信号是按下的当场触发的一次性触发控制(Trigger Once Signal),这个信号转化为编程语言就是bool值,通过控制真还是假判定是否按下跳跃键
public class PlayerInput : MonoBehaviour
{
...
// 一次性信号
public bool jump; //跳跃信号
public bool lastJump; //记录上一次的jump信号 用于和当前jump信号做比对 理解为是否正在跳跃
...
void Update()
{
bool newJump = Input.GetKey(KeyB);
//判断跟上一个状态是否一致,会出现由1.没按下到按下 2.按下到松开两种情况(Blastjump是true时,这种排除)
if (newJump != Blastjump&&Blastjump != true)
{
Bjump = true;
}
else
{
Bjump = false;
}
//上一个状态
Blastjump = newJump;
}
Input.GetKey 可以使用 GetKeyDown按下的时候Bjump就是true,从而忽略if判断语句
跳跃动画的应用
使用trriger参数作为触发跳跃动画的条件
if (pi.Bjump == true)
{
anim.SetBool("jump", true);
}
跳跃时应该锁死用户输入
为了让跳跃时不能再控制角色旋转,我们需要将Input在跳跃时锁死。之前我们就已经实现了输入模块的软开关(inputEnabled)。现在的问题就是何时开关输入模块,我们将使用动画状态机StateMachineBehaviour脚本来实现控制。如下图,脚本的创建方法,需要注意:不能将大量的逻辑代码写入其中。
- 脚本的作用主要是当进入或者退出这个状态时就会触发相应的语句
以下是FSMOnEnter 的代码,作用是通过重载OnStateEnter,在动画状态机执行到挂载该脚本的动画状态时向父物体及自身的所有MonoBehavior发送消息调用名叫msg的方法。