unity 刚体移动跳跃动画参考代码

public class PlayerController : MonoBehaviour
{
    public Rigidbody rig;
    public float mutliVel=3f;
    public Vector3 vel;
    public float H;
    public float V;

    public Animator anima;

    public float landHeight = -0.14f;

    public float radius = 0.28f;

    public bool onLand;

    public float gravity = -9.81f;

    public LayerMask layerMask;

    public float jumpHeight=40f;

    public float jumpTime;

    // Update is called once per frame
    void Update()
    {
        vel = transform.rotation * new Vector3(H = Input.GetAxis("Horizontal"), 0, V = Input.GetAxis("Vertical")) *
              mutliVel;
        rig.velocity = vel;
        
        UpdateAnimator();
        
        if (Input.GetKey(KeyCode.LeftShift))
        {
            anima.SetFloat("V",2);
            mutliVel = 5;
            
            vel = transform.rotation * new Vector3(H = Input.GetAxis("Horizontal"), 0, 1) *
                  mutliVel;
            V = Mathf.Abs(V);
            rig.velocity = vel;
        }
        else
        {
            mutliVel = 3;
        }
        OnLand();
        OnJump();
    }

    void UpdateAnimator()
    {
        anima.SetFloat("V", V);
        anima.SetFloat("H", H);
    }

    void OnLand()
    {
        if (Physics.CheckSphere(
                new Vector3(transform.position.x, transform.position.y - landHeight, transform.position.z), radius,layerMask))
        {
            onLand = true;
            anima.SetBool("onLand", true);
        }
        else
        {
            onLand = false;
            anima.SetBool("onLand",false);
        }

        if (!onLand)
        {
            rig.AddForce(transform.up * gravity);
        }
    }

    void OnJump()
    {
        if (Input.GetKeyDown(KeyCode.Space)&&onLand)
        {
            anima.SetBool("onJump", true);
            jumpTime = 0.5f;
        }
        if (Input.GetKey(KeyCode.Space)&&jumpTime>0f&&anima.GetBool("onJump"))
        {
            rig.AddForce(new Vector3(0f,jumpHeight,0f));
            jumpTime -= Time.deltaTime;
        }
        else
        {
            anima.SetBool("onJump", false);
        }

    }
}

动画控制器实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值