前面的章节,我们的小姐姐已经可以又跑又跳了,但是跳的时候她的动作还没有改变,这一次我们给小姐姐添加上跳跃的动作。
我们看了一下,这个小姐姐自带的跳跃动画实在是太过奇特~,不太符合我们的需求,所有,我们得去找一个动画,下面提供一个免费的动画下载的网址,它上面的骨骼都是标准格式,很适合我们。
动作下载
我们在网址里搜索了一个jump的动作,发现了他。
很适合我们,就用他了,在使用他之前,我们还得进行一步操作。
修改
将动画类型改成humanoid。接着就将动画丢到动画控制器上。与我们的基础混合树链接起来。
动画设置
接着我们创建一个触发器,jump,用于两者动画的切换
触发器设置
下面你们是不是想跃跃欲试,在上一节内容提到的
float jumpPower = 3.5f
public void startJump(bool jump) {
if (jump){
moveDirection.y += jumpPower;
//加入我们的动画设置。----------
}
}
不过这样会有一种文体,那就是 如果手指在跳跃键上研究了,这个数值会增加,我们的小姐姐一下子就会变成一个一跃百米的超人,那你可能会说加控制,跳起瞬间就不能控制在增加数值了,然后在落下接触地面的时候这个打开开关,然后检测落下,检测跳起,而且由于你跳起的时候是个渐变的过程,所以说你明明说了跳起,但是你的小姐姐还是在地面上的,然后把你控制跳跃的开关打开了,小姐姐又变成了超人……总之这里面需要非常复杂的逻辑,而我们这里提供了一种简单的思路,利用动画的event。
1.首先我们在PlayerTestView和PlayerTestView_Anim进行添加和修改。
PlayerTestView:
public void startJump(bool jump) {//这部分仍然在我们的PlayerTestMediator控制,和上一节内容一样
if (jump ) {
animator_Jump();
}
}
public void onJumpEnter() {//新增加动画event事件。
moveDirection.y += jumpPower;
}
PlayerTestView_Anim:
struct PlayerAnimaId {
public int Idle;//禁止状态行为切换控制。
public int baseAniam;
public int jump;//新增加跳跃
};
private void playerAnimatorInit() {
animator = GetComponent<Animator>();
pad.baseAniam = Animator.StringToHash("Walk");
pad.Idle = Animator.StringToHash("Idle");
pad.jump = Animator.StringToHash("Jump");//新增加跳跃
}
private void animator_Jump() {//控制跳跃
animator.SetTrigger(pad.jump);
}
2.在跳跃动画中开始设置跳跃事件
跳跃事件设置我们这里选择小姐姐踩地的一帧作为我们的回调。
一切准备就绪我们来看一下效果。 效果。效果还行,可是这里会有一个问题,那就是当跳跃动画播放结束之后,我们的小姐姐又在空中切换成了跑步,这不是我们想要的,在下一节中,我们将设置小姐姐空中停留的状态,以及落地检测。
上一节
下一节
网友评论