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


      【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动画,因此直升机就呆呆的不动了 

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

        点赞,关注!!!

  • 相关阅读:
    改进YOLOv8:结合ConvNeXt V2骨干网络!使用MAE共同设计和扩展ConvNet
    mysql中DQL查询语句的使用级联操作
    AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼 ⛵
    Vue单文件组件的创建及三种暴露(分别、统一、默认)方式
    spark ui 指南
    连续六个季度实现盈利改善,达达集团内外双重确定性凸显
    弹簧系统三维可视化
    【Kotlin 协程】协程的挂起和恢复 ① ( 协程的挂起和恢复概念 | 协程的 suspend 挂起函数 )
    HtmlCss光标(插入符caret)透明隐藏光标 221106笔记
    解决el-autocomplete组件远程搜索的区间匹配问题
  • 原文地址:https://blog.csdn.net/cooclc/article/details/133842712