【Unity动画】状态机添加参数控制动画切换(Animator Controller) 您所在的位置:网站首页 blendtree动画转换会有一段动画错误 【Unity动画】状态机添加参数控制动画切换(Animator Controller)

【Unity动画】状态机添加参数控制动画切换(Animator Controller)

2024-07-18 06:11| 来源: 网络整理| 查看: 265

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(); } // 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 2018-2019 实验室设备网 版权所有