赞
踩
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中的状态切换。
可以使用 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)时,参数的变化可以用来控制不同动画层的权重。这样可以实现平滑的过渡和混合,使动画过渡更加自然。(看后续教程)
总的来说,设置参数使得动画系统能够与游戏逻辑和用户输入相互关联,使得动画在运行时能够根据外部条件的变化而动态调整,从而增强了动画的表现力和交互性。这种动态的调整和响应是游戏中实现生动和流畅动画的关键。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。