跳跃
跳跃输入以及动画播放
private void HandleJumpInput()
{
inputActions.PlayerActions.Jump.performed += i => { jump_Input = true; };
}
public void HandleJumping()
{
if (playerManager.isInteracting)
{
return;
}
if (inputHandler.jump_Input)
{
if(inputHandler.moveAmount > 0)
{
moveDirection = cameraObject.forward * inputHandler.vertical;
moveDirection += cameraObject.right * inputHandler.horizontal;
animatorHandler.PlayTargetAnimation("Jump", true);
moveDirection.y = 0;
Quaternion jumpRotation = Quaternion.LookRotation(moveDirection);
myTransform.rotation = jumpRotation;
}
}
}
这里有几个问题,
碰撞体不位移
首先是播放跳跃动画的时候,外层的碰撞体不会和人物一起进行跳跃。如下图
出现这个的原因是我这里的动画使用bake into pos(Y),取消掉勾选就可以碰撞体和动画一起移动了。(那个选项的意思是root motion不再起作用,只是让我们的动画位移,root节点不会位移。)
第二个问题,人物跳不起来了
我看了看代码,发现我们在很多地方都把rigidbody.velocity.y锁死了。
解决方案就是在跳跃的时候不锁死velocity.y
我们在PlayerManager里面增加一个isJumping的变量,update的时候从动画机里进行获取。
PlayerLocomotion脚本执行跳跃的时候也设置动画机的isJumping
然后在isJumping的时候不锁死我们的y方向的速度。
代码可参阅
代码地址