Unity黑魂学习笔记P19 Jumping

跳跃输入以及动画播放

        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方向的速度。

代码可参阅
代码地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值