Unity动画系统学习笔记(一)动画剪辑与状态机

一、动画系统工作流

一个完整的动画系统工作流包含如下几个部分:

  • 动画剪辑(Animation Clips):包含某些对象如何随时间更改其位置、旋转或其他属性的信息。
  • 状态机(Animator Controller):跟踪当前正在播放的动画剪辑,以及当动画剪辑应该改变或混合在一起时的状态信息。
  • 骨骼(Avatar):用来映射人形角色的一种通用内部格式。通过骨骼可以将外部的人形动画重定向到我们自己的角色模型中。
  • 动画组件(Animator):动画剪辑、状态机、骨骼一同通过动画组件附加到某个游戏物体上。

二、动画剪辑

如果学习过视频剪辑或动画制作相关的知识,应该对它再熟悉不过了。简单来讲,就是在时间轴上打上一个个关键帧,并改变每个关键帧时物体的属性。然后Unity就会自动生成关键帧之间的形状、动作补间,使物体具有连贯、流畅的动画。

选中一个物体,按「Ctrl+6」打开「Animation」面板,为其创建一个动画剪辑。

创建完成后,点击「Add Property」按钮,就可以添加你想要改变的属性

添加属性后,在时间轴上打上对应的关键帧,并改变属性的数值,就可以形成一段连续的动画

点击左上角的录制模式,我们就可以直接在场景中调整物体的各项属性,Animation会自动添加关键帧并记录下改变后的数值。

点击左下角的「Curves」可以进入动画曲线界面

三、动画状态机

在给物体创建完动画剪辑后,在目录中会自动生成一个「Animator Controller」,这个文件就是动画状态机。通过动画状态机,我们可以控制模型在各个动画状态之间进行切换。

现在来尝试实现实现一个让角色从待机状态切换到死亡状态的动画。首先将两个动画剪辑导入到状态机,然后将待机状态设置为当前层级的默认状态

再创建一条从待机状态到死亡状态的切换

添加一个参数「isDead」,并设置为转换条件

将状态机挂载到主角身上的「Animator」组件中,运行游戏。通过手动控制「isDead」参数观察效果。

要通过代码控制参数的改变也很简单

_animator.SetBool("isDead",true);

private static readonly int IsDead = Animator.StringToHash("isDead");
// ...
_animator.SetBool(IsDead,true);

3.1 混合树

在某些情况下,我们需要动画之间进行平滑的过渡,而不是从一个状态直接切换到另一个状态。比如处在走路状态时,要切换到跑步状态,就需要一个加速的过程。这种效果可以通过混合树实现。

3.1.1 1D混合

对于从走路到跑步的动画切换,可以通过一个简单的1D混合树来实现。
首先在状态机中创建一个混合树,然后双击打开

可以发现,混合树自动创建了一个参数,且混合类型默认是1D混合。

我们需要根据速度来进行走路到奔跑的切换,所以将参数名改为Speed。然后将行走和奔跑的动画剪辑添加进来

然后在Idle状态和混合树之间进行连线,如果Speed大于0,则进入混合树,否则维持在Idle状态。这里为了防止精度问题,将阈值设置为0.1。运行游戏看下效果

PS:如果从外部导入的动画有如下这种报错的话,可以将动画剪辑中的Events事件删除。

3.1.2 2D混合

当我们的动画混合比较复杂,一个参数已经无法满足需求时,就可以采用2D混合。2D混合具有如下几种类型
</

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值