Unity3D 学习笔记(二) 添加基础动画、奔跑与移动

学习内容:b站傅老师的U3D黑魂复刻课程

添加动画控制器和控制脚本

在这里插入图片描述

在animator中添加动画

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200217002126991.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t6ejY5OTE=,size_16,color_FFFFFF,t
创建叫ground的 blend tree

添加对应动画
在这里插入图片描述
出现默认的idle状态
在这里插入图片描述
接下来通过脚本添加动画控制

前面的Dmag数值就可以作为Speed

这里说一下计算Dmag为什么不用上一个脚本里的velocity,因为那个其实是加速度。试一下就知道了

public GameObject model;

public PlayerInput pi;

[SerializeField]

private Animator anim;

// Start is called before the first frame update

void Awake()

{

    pi = GetComponent<PlayerInput>();

    anim = model.GetComponent<Animator>();

}

// Update is called once per frame

void Update()

{

    anim.SetFloat("Speed",pi.Dmag);

    

}

在这里插入图片描述
取消apply root motion后可以看到现在模型可以原地踏步了

添加移动和转向

private Rigidbody rigid;

// Start is called before the first frame update

void Awake()

{

    pi = GetComponent<PlayerInput>();

    anim = model.GetComponent<Animator>();

    rigid = GetComponent<Rigidbody>();

}

// Update is called once per frame

void Update()

{

    anim.SetFloat("Speed",pi.Dmag);

model.transform.forward = pi.Dvec;

}

void FixedUpdate()

{

    rigid.velocity = pi.Dvec;

}

添加刚体以及FixedUpdate中对刚体速度的改变实现移动。

可以行走了
在这里插入图片描述

增加奔跑

增加变量

public string keyRun = "left shift";

public bool run;

以及pi中的按键查询

   run = Input.GetKey(keyRun);

添加速度系数

[SerializeField]

private float SpeedFactor = 2;

刚体移动速度

private Vector3 bodyVelocity = Vector3.zero;

在update中计算速度

void Update()

{

    model.transform.forward = pi.Dvec;

    if(pi.run){

        bodyVelocity.x = SpeedFactor * pi.Dmag * pi.Dvec.x;

        bodyVelocity.z = SpeedFactor * pi.Dmag * pi.Dvec.z;

    }

    else{

        bodyVelocity.x = pi.Dmag * pi.Dvec.x;

        bodyVelocity.z = pi.Dmag * pi.Dvec.z;

    }

将速度赋值

void FixedUpdate()

{

    rigid.velocity = bodyVelocity;

}

动画已经添加完成,直接在加入setfloat

anim.SetFloat(“Speed”,pi.run?pi.Dmag:2);

这样跑步和走路切换的太突然,加入平滑过渡

    anim.SetFloat("Speed",Mathf.Lerp(anim.GetFloat("Speed"),pi.run?2:pi.Dmag,0.5f));

同时修改转向平滑

model.transform.forward = Vector3.Lerp(model.transform.forward,pi.Dvec,0.5f);

测试发现bug就是即使原地不动,按下shift也会做出奔跑动作

作出修改

anim.SetFloat("Speed",Mathf.Lerp(anim.GetFloat("Speed"),pi.Dmag*(pi.run?2:1),0.5f));

本节完成。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆沙粽子好吃嘛!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值