EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

[Unity]Animator Controller简介

Animator Controller 动画控制器,

接之前的Blog→这里

 

这里从Animator的UI讲起,

动画控制器是怎么控制动画播放的呢?

假设不使用脚本,Animator Controller了提供了4种Parameter来供控制流程

这4个类型动得参数分别是Float、Int、Bool、Trigger

Parameter

 

 

设置参数后如何使用?

点击transition,查看Inspector,里面有个Conditions,可以通过点击+号,增加参数,

假设Bool型参数,设置True or False就会告诉这个transition什么时候执行。

额外提醒一下Has Exit Time这个东西,如果勾选,那么就要等到整个单动画播放完成,才会播放下一个动画,

不勾选,就是立即转换,默认不勾选Has Exit Time。

Conditions

 

脚本控制方法是

Animator.SetBool(参数名称,布尔值);

 

讲一下其它3个参数,

先说float,这个函数有4个重载

public void SetFloat(string name, float value);
public void SetFloat(string name, float value, float dampTime, float deltaTime);
public void SetFloat(int id, float value);
public void SetFloat(int id, float value, float dampTime, float deltaTime);

 

 

一般来说,我们用到的是这个API:

Animator.SetFloat("Speed",2.0f);

但是这个还有一个重载的方法,叫做:

Animator.SetFloat(string name,float value,float dampTime,float deltaTime)

 

dampTime: 用 dampTime 长的时间,将 我们设置的叫做  name 的 float类型 的值由 原本的值 改变到给定的 value 值。

换句话说,dampTime是允许参数达到value的时间,你可以想象成 技能需要充能,

充能完成是100,但是我不允许你一下子充能完成,即float立刻变成100,

所以我需要你在dampTime的时间内,慢慢变成value的值

注意:是按百分比匀速变化的。

 

deltaTime:两次执行该方法的时间间隔。(因为这个方法会每 deltaTime 执行一次,直到 name = value)

deltaTime参数一般默认使用Time.deltaTime。什么是deltaTime请看→这里

 

另外Animator Controller是可以有多个Layer的,

layer就是包含的State的集合,默认使用的是BaseLayer,一般情况下只有一个layer就够了。

layer的出现,个人认为是为了逻辑更加清晰,比如FPS游戏,一般来讲,上半身的动画和下半身是分开的,下半身用BaseLayer并且权重为1(最高),上半身有开

枪、换弹的动画,为了不干预移动,权重或小于1。

 

 

至于混合方式:

有Override和Additive,

blending

是想要覆盖还是添加动画,自己选。

 

 

关于Avatar Mask:

直接翻译过来是替身遮罩,用过FLASH或PS软件的应该知道什么叫遮罩层,

Avatar Mask就像面纱一样屏蔽掉某些部位的动画,

比如你只需要上半身的动画的时候,你就要屏蔽掉下半身的所有动作。

 

什么是Avatar Mask看→这里

 


我希望看到的是上半身播放攻击动画,两条腿走路的动画,

给New Layer添加 Avatar Mask,遮挡New Layer中角色的上半身动画。

创建 Avatar Mask 命名为 RunMask,选中 RunMask 查看 Inspector 面板

 

 

补充:

Update Mode:更新模式:Normal表示使用Update进行更新,Animate Physics表示使用FixUpdate进行更新(一般用在和物体有交互的情况下),Unscale Time表示无视timeScale进行更新(一般用在UI动画中)。
Culling Mode:剔除模式:Always Animate表示即使摄像机看不见也要进行动画播放的更新,Cull Update Transform表示摄像机看不见时停止动画播放但是位置会继续更新,Cull Completely表示摄像机看不见时停止动画的所有更新。

 


 

参考文档:

[1] Unity Animator Layer动画分层

[2] Unity官方文档 - Animator Layers

[3] Unity3D之Mecanim动画系统学习笔记(五):Animator Controller

This article was last edited at 2020-04-09 18:27:31

* *