对状态机设置自定义脚本StateMachineBehaviour
这种脚本能够实现什么
优点:
通过Animator的状态机就可以实现 敌人AI、NPC AI,
可以在对应状态机 的动画进行 播放 的时候,生成 特效、音效,以及特定的物品,例如:当 状态机动画为喝水的动作,调用这个脚本里面的函数使得角色手中拿起水杯
缺点:
Transform和GameObject变量 只能放入预制体.prefab文件。
transform = Transform.Find("Cube");
gameObject = GameObject.Find("Cube");//只能通过GameObject.Find("Cube")来初始化变量
Transform.Find方法来初始化变量。
游戏开始后,显示Test_AnimationBehaviour.cs的挂载物体为(Clone),在Hierarchy视图中并不显示。
Start函数无效,OnStateEnter函数代替了Start函数。
在Animator视图下,选中状态机,在Inspecotr视图下,点击Add Behaviour按钮,添加行为。

Test_AnimationBehaviour.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 状态机行为,动画行为
/// </summary>
public class Test_AnimationBehaviour : StateMachineBehaviour {
public Transform transform;//只能放入预制体.prefab文件
public GameObject gameObject;//只能放入预制体.prefab文件
private void Awake()
{
gameObject = GameObject.Find("Cube");//只能通过GameObject.Find("Cube")来初始化变量
}
// OnStateEnter is called when a transition starts an

本文介绍了如何在Unity中使用StateMachineBehaviour为动画状态机设置自定义脚本,以实现敌人AI和NPC AI等功能。通过此类脚本,可在动画播放时触发特效、音效和物品生成。然而,这种方法存在一些限制,如Transform和GameObject变量只能从预制体获取,Start函数不生效,需要使用OnStateEnter代替。在实际应用中遇到了NullReferenceException和UnassignedReferenceException错误,这些问题需要正确初始化变量和引用以避免。
最低0.47元/天 解锁文章
2万+





