Contents

Animator动画状态机

什么是有限状态机

有限状态机(Finite - state machine, FSM)又称有限状态自动机,简称状态机。表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

  • 有限:表示是有限度的不是无限的
  • 状态:指所拥有的所有状态

举例说明:

假设我们人会做很多个动作,也就是有很多种状态

这些状态包括 站立、走路、跑步、攻击、防守、睡觉等等

我们每天都会在这些状态中切换,而且这些状态虽然多但是是有限的

当达到某种条件时,我们就会在这些状态中进行切换

而且这种切换时随时可能发生的

有限状态机对于我们的意义

游戏开发中有很多功能系统都是有限状态机

最典型的状态机系统

动作系统 —— 当满足某个条件切换一个动作,且动作是有限的

AI(人工智能)系统 —— 当满足某个条件切换一个状态,且状态时有限的

所以状态机是游戏开发中一个必不可少的概念

创建动画状态机

  1. 通过为场景中物体创建动画时自动创建
  2. 手动创建动画状态机文件

Animator中的API

//通过状态机条件切换动画
animator.SetFloat("条件名", 1.2f);
animator.SetInteger("条件名", 5);
animator.SetBool("条件名", true);
animator.SetTrigger("条件名");

animator.GetFloat("条件名");
animator.GetInteger("条件名");
animator.GetBool("条件名");

//2.直接切换动画 除非特殊情况 不然一般不使用
animator.Play("状态名");

动画子状态机

  • 子状态机顾名思义就是在状态机里还有一个状态机
  • 它的主要作用就是某一个状态时由多个动作状态组合而成的复杂状态
  • 比如某一个技能它是由3段动作组合而成的,蹲下,开火,站起
  • 当我们释放这个技能时会连续播放这3个动作

创建子状态机

在Animator Controller窗口中右键->Create Sub-State Machine

注意

在子状态机中 如果想要切换回去 需要在子状态机内 和主状态机的状态相连