Unity - 手册:动画参数
Byleoyang@数字媒体技术,抄袭必究
在Unity 动画状态机中,我们实现了播放动画片段,当我们有多个动画片段的时候,状态机就像一个调度中心,可以控制播放不同的动画片段(比如走、跑、射击、下蹲、防御、攻击动作)。但是不同的动画片段直接需要切换,既然切换就需要过渡,我们在状态机用一根线表示两个动画之间的过渡。
这些过度能够让两个动画切换更加自然,就像PR剪辑中,为两个视频添加了技巧转场(交叉叠化等)。
并且可以创建一些公用参数(Parameters),通过Animator类存储对应游戏物体的状态机,然后调用setBool(“参数”,你指定的参数数值)、setFloat(“参数”,你指定的参数数值)、setIntger(“参数”,你指定的参数数值)来设置。
参数可以作为条件添加到每一根线上面,从而控制动画的切换!
在Unity中,动画状态的切换是通过Animator Controller中的过渡(Transition)来实现的。过渡是状态之间的连接,控制过渡一般都是靠调用代码参数
我们来实现一个案例:
1.创建动画状态机(Animator Controller): 在Unity中,你可以通过创建Animator Controller来管理动画状态。在Unity编辑器中,右键点击Assets窗口,选择Create -> Animator Controller。然后,给它一个合适的名字,如"MyAnimatorController"。
2.创建动画状态: 在Animator Controller中,你可以添加各种动画状态。每个状态代表一个动画片段,比如站立、行走、跳跃等。你可以通过拖拽动画资源到Animator Controller中来创建这些状态。
3.设置过渡: 在状态之间建立过渡关系。选中一个状态,然后右键,Make Transition,就会创建一根线,这个线指向要过渡的动画片段。
4.设置过渡条件: 选中你要控制的动画过渡线,然后右边弹出该过渡线的属性,最下面Conditions(触发条件)点击加号,自动弹出左边新增的公共变量,自己任选,最好对应起来。
5.使用脚本控制参数: 在游戏脚本中,你可以通过调用Animator组件的方法来修改动画参数的值。例如,使用animator.SetFloat("Forward", v);
可以设置名为"Forward"的浮点数参数的值为变量v。
6.触发状态切换: 当动画参数的值满足过渡条件时,Animator Controller会自动触发状态切换。这可能导致从一个状态过渡到另一个状态,并播放相应的动画。
在脚本种通过
animator.SetFloat("Forward", v);
animator.SetFloat("Strafe", h);
animator.SetBool("Fire", fire);
动画参数的值被设置为输入变量,这可能触发Animator Controller中的状态切换。
- Integer - 整数
- Float - 带有小数部分的数字
- Bool - true 或 false 值(由复选框表示)
- 触发器 - 一个布尔参数,当过渡使用时由控制器重置(由圆形按钮表示)
可以使用 Animator 类中的函数从脚本中为参数赋值:SetFloat、SetInteger、SetBool、SetTrigger 和 ResetTrigger。
完整代码参考
using UnityEngine;
using System.Collections;
public class SimplePlayer : MonoBehaviour {
Animator animator;
// Use this for initialization
void Start () {
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
bool fire = Input.GetButtonDown("Fire1");
animator.SetFloat("Forward",v);
animator.SetFloat("Strafe",h);
animator.SetBool("Fire", fire);
}
void OnCollisionEnter(Collision col) {
if (col.gameObject.CompareTag("Enemy"))
{
animator.SetTrigger("Die");
}
}
}
注意:我们自己设置的参数除了可以控制动画的过渡,也可以控制动画混合树内部的动作切换,这些参数就像你在代码声明的全局变量,本身不属于任何一个人,而是一个公用的“开关”
参数的其他目的和用途:
-
用户输入的响应: 在你提供的脚本中,通过获取用户的输入,比如水平和垂直输入,以及按钮的按下,这些输入值被用作动画参数。这样,动画系统就可以根据用户的实际操作来控制动画的播放,使动画更加生动和交互式。
-
外部事件的触发: 动画不仅可以由用户输入触发,还可以由游戏中的事件触发。例如,在脚本中,当角色与敌人发生碰撞时,触发了名为"Die"的触发器参数,这会导致动画状态机切换到死亡状态。这样,动画可以根据游戏中的具体事件进行相应的调整。
-
动画状态切换的条件: 在动画状态机中,状态之间的切换通常需要满足一些条件。这些条件可以是动画参数的值达到某个阈值,或者某个触发器参数被激活。通过设置参数,你可以灵活地控制状态之间的切换逻辑。
-
实现动画混合: 在使用混合树(Blend Tree)时,参数的变化可以用来控制不同动画层的权重。这样可以实现平滑的过渡和混合,使动画过渡更加自然。(看后续教程)
总的来说,设置参数使得动画系统能够与游戏逻辑和用户输入相互关联,使得动画在运行时能够根据外部条件的变化而动态调整,从而增强了动画的表现力和交互性。这种动态的调整和响应是游戏中实现生动和流畅动画的关键。