【Unity基础】6.动画状态机

本文介绍了Unity中的AnimatorController组件,包括其在动画状态管理中的作用,如何创建、编辑动画状态、设置Entry和Exit状态,以及如何挂载和管理动画。通过实例演示了状态之间的转换和动画播放逻辑。

  【Unity基础】6.动画状态机

        大家好,我是Lampard~~
        欢迎来到Unity基础系列博客,所学知识来自B站阿发老师~感谢 

(一)Animator Controller组件

(1)创建组件

    Animator Controller组件是unity用于控制管理动画状态的组件。什么是状态机,为什么引入这个概念呢? 

    一个角色可能存在着跑,跳,站立,攻击等多种动画状态,若在以往,我们可以通过代码来创建并切换角色不同的动作,但是这样一来增加了程序的工作量,二来并不直观,美术要看到实机效果(比如奔跑动画切攻击动画)需要程序把资源打入到包体,把代码写好才能测试。

    因此unity提供了这个组件,让美术同学编辑器中就可以管理不同状态下的动画展现,并且看到实际效果;让程序同学只需要关注不同状态下的变量变化,不需要管理动画的增删

    只需要右键create,选中Animator Controller就可以创建一个动画管理器组件

(2)动画状态编辑界面

    双击我们创建的Animator Controller,就可以打开动画编辑界面,我们能够看到初始的Animator Controller都会自带三个状态,分别是Any State, Entry和 Exit

Any State状态

    表示任意状态的特殊状态。例如我们如果希望角色在任何状态下都有可能切换到死亡状态,那么Any State就可以帮我们做到。当你发现某个状态可以从任何状态以相同的条件跳转到时,那么你就可以用Any State来简化过渡关系

Entry状态 

表示状态机的入口状态。当我们为某个GameObject添加上Animator组件时,这个组件就会开始发挥它的作用。
如果Animator Controller控制多个Animation的播放,那么默认情况下Animator组件会播放哪个动画呢? 由Entry来决定的。
但是Entry本身并不包含动画,而是指向某个带有动画的状态,并设置其为默认状态。被设置为默认状态的状态会显示为 橘黄色

Exit状态

表示状态机的出口状态,以红色标识。如果你的动画控制器只有一层,那么这个状态可能并没有什么卵用。但是当你需要从子状态机中返回到上一层(Layer)时,把状态指向Exit就可以了

(二)动画状态

(1)新增&删除&重命名动画状态

    如果看不懂上面三个初始状态的简介那木有关系,因为我们会从头开始学习

    首先就是创建和删除了,在动画状态编辑器中,右键create state就可以创建一个动画状态。选中动画状态,右键delete就可以删除(初始的三个状态删不了哟)

    其次如果你想给一个状态重命名,只需要选中这个状态,在右侧的Inspector属性面板中找到名字属性修改就可以了

(2)动画状态的属性

    在动画面板中我们可以看到状态还有以下的属性,不用太纠结,在日后肯定会用到它们的,现在我们可以简单的看一下介绍:

(3)动画状态的联系

    动画状态之间会有联系,比如受击状态后接死亡,比如前摇状态后接攻击。这些状态的联系,unity会用transition来定义这组关系,而在状态编辑器中,会用一个线段的指向来呈现 

     像上图我们就给state1和state2做了一个双向的联系,意味着S1可以转换成S2,S2也可以转成S1,它们的联系在右侧属性面板中的transtions记录着,若是想删除它们的联系,那么在transtions中删除即可

    我们知道entry会指向初始的动画状态,比如现在默认就是指向S1状态,那如果我想让S2作为初始状态,只需要选中S2状态,右击Set as default state即可

(三)挂上状态动画

(1)创建动画animation

    上面巴拉巴拉一大堆,可能就有读者大大开始吐槽:这个和动画有神马关系???

    莫急!!终于要到关键的步骤给状态挂上动画了。首先是创建一个简单的animation,比如我们给之前的直升机,加上上升的动画,简单编辑一下其Y轴随时间变化增加;

(2)添加动画至状态motion

    选中我们要挂在的动画状态,然后把创建好的动画拖动至motion属性栏中就可以挂上了

    点击运行看看,动画状态从entry进入到State1,然后就播放fly动画。而我们的直升飞机就飞起来了~

     若此时加一个动画状态State2,让State1在播放完毕后进入到State2会怎么样呢?

    正如我们所想,此时fly动作被播放一遍以后就进入到state2,因为state2没有定义其他的motion动画,因此直升机就呆呆的不动了 

    好啦今天先到这里,下周进行更复杂一些的动画编辑操作~

    点赞,关注!!!

<think>好的,用户想了解如何在Unity中使用子动画状态机。首先,我需要回忆一下Unity动画系统的基本结构,特别是Animator Controller和状态机的相关知识点。子状态机是Animator Controller中的一个功能,用于将多个状态组织在一起,提高可管理性。 首先,用户可能已经知道基础动画状态机,现在想进一步学习子状态机的使用。我需要解释子状态机的概念,以及它的优点,比如模块化、复用性等。然后,分步骤说明如何创建子动画状态机,包括在Animator窗口中的操作,比如右键菜单选择创建子状态机,并拖入需要的动画状态。 接下来,应该提到如何配置子状态机的入口和出口,设置参数来控制状态转换,比如使用布尔型或触发器参数。还要说明子状态机内部的过渡关系,以及如何与父层的状态进行连接,比如从父状态的某个状态转换到子状态机的入口节点。 然后,可能需要提到子状态机的嵌套使用,即子状态机内部再包含子状态机,适用于更复杂的动画逻辑。这部分需要强调层次化管理的优势,但也要注意不要过度复杂化结构。 在教程部分,需要详细步骤,例如创建Animator Controller,添加子状态机,拖入动画状态,配置过渡条件等。同时,代码示例可能不是必须的,但可以提到通过脚本控制参数,比如使用Animator.SetBool()方法,这样用户知道如何动态控制状态转换。 用户可能遇到的问题包括如何正确连接入口和出口节点,参数设置错误导致转换失败,或者子状态机内部的过渡没有正确配置。需要提醒常见错误和调试方法,比如检查参数名称和条件,确保过渡路径正确。 另外,参考之前的引用,用户提到Animator Override Controller,可能子状态机可以和这个功能结合使用,但需要确认是否相关。如果用户的问题是关于重写动画状态,可能需要说明子状态机与Override Controller的区别,但根据当前问题,重点应放在子状态机的创建和使用上。 最后,确保回答结构清晰,分步骤说明,并生成相关问题,帮助用户深入理解。可能的问题包括子状态机与混合树的区别,参数传递,性能影响等,这些都需要在相关问题中列出,以便用户进一步探索。</think>### Unity动画状态机使用教程 在Unity中,子动画状态机(Sub-State Machine)是Animator Controller中用于组织复杂动画逻辑的重要工具。它通过将相关动画状态封装为独立模块,显著提升动画系统的可维护性和复用性[^1]。 #### 一、核心操作步骤 1. **创建子状态机** - 在Animator窗口中右键选择 *Create Sub-State Machine* - 重命名(例如"AttackSystem") - 双击进入子状态机编辑界面 2. **填充动画内容** ``` [父层] └── AttackSystem(子状态机) ├── Entry → 初始状态(必须连接) ├── Idle ├── LightAttack └── HeavyAttack ``` 3. **配置过渡关系** - 在父层建立状态到子状态机的过渡线 - 设置触发条件(例如`AttackTrigger`参数) - 子状态机内部配置本地过渡规则 #### 二、参数控制示例 ```csharp // 通过脚本触发子状态机 public Animator anim; void StartAttack() { anim.SetTrigger("AttackTrigger"); anim.SetInteger("AttackType", 2); // 控制子状态机内部分支 } ``` #### 三、高级技巧 1. **嵌套结构**:支持多层子状态机嵌套(建议不超过3层) 2. **混合使用**:可与Blend Tree组合实现平滑动画过渡 3. **复用方案**:通过Animator Override Controller修改子状态机内容而不影响原控制器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值