61.3D动画子状态机

61.3D动画-动画子状态机


61.1 知识点

什么是子状态机

  • 子状态机顾名思义就是在状态机里还有一个状态机。
  • 它的主要作用就是某一个状态是由多个动作状态组合而成的复杂状态,比如某一个技能它是由3段动作组合而成的,跳起、攻击、落下。
  • 当我们释放这个技能时会连续播放这3个动作,那么我们完全可以把它们放到一个子状态机中。

创建子状态机

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

编辑子状态机

  • 注意:子状态机和外部状态的相互连接方式。
  • 假如没有创建子状态机和上一层状态的连接的话,会一直卡在子状态机最后一个动画状态一直播放最后一帧。
  • 如果连线选择的是状态机的BaseLayer的话,播完子状态机的动画回到上一层的默认动画。
  • 连线时也可以手动选择切换到上一层的哪个动画,连线完回到上一层也会自动添加连线,灰色代表着切换不过去的状态。


61.2 知识点代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson61_3D动画_动画子状态机 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 什么是子状态机
        //子状态机顾名思义就是在状态机里还有一个状态机
        //它的主要作用就是某一个状态是由多个动作状态组合而成的复杂状态
        //比如某一个技能它是由3段动作组合而成的,跳起,攻击,落下
        //当我们释放这个技能时会连续播放这3个动作
        //那么我们完全可以把他们放到一个子状态机中
        #endregion

        #region 知识点二 创建子状态机
        //在Animator Controller窗口中右键->Create Sub-State Machine
        #endregion

        #region 知识点三 编辑子状态机
        //注意:子状态机和外部状态的相互连接方式
        #endregion
    }

}

61.3 练习题

在之前练习题的基础上,按K键可以触发一个动画子状态机状态

创建子状态机,添加和混合树的连线和参数。设置好子状态机的状态和连线。


添加代码控制按下K时播放子状态机

if (Input.GetKeyDown(KeyCode.K))
    animator.SetTrigger("Fire");

61.4 练习题代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson61_练习题 : MonoBehaviour
{
    private Animator animator;

    void Start()
    {
        animator = this.GetComponent<Animator>();
    }

    void Update()
    {
        animator.SetFloat("x", Input.GetAxis("Horizontal"));
        animator.SetFloat("y", Input.GetAxis("Vertical"));

        #region 练习题一
        //在之前练习题的基础上,按K键可以触发一个动画子状态机状态

        if (Input.GetKeyDown(KeyCode.K))
            animator.SetTrigger("Fire");

        #endregion
    }


}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏