我正在统一我的第一个敌人人工智能。我试图用动画控制器制作一个完成状态机来完成它。
我刚刚发现了当AI处于状态时调用的StateMachineBehaviour脚本。它有多个方法,包括OnStateEnter。每一次人工智能进入状态时都被称为。
我的问题只是关于优化,我的AI需要得到的GameObject“播放器”来攻击它。所以我现在在我的OnStateEnter方法中得到它,我觉得很糟糕,因为每当动画被调用时,我都会得到它,我只想在一开始得到它一次。
我基本上需要一个开始功能,但它不起作用,我已经做了研究,但什么也没有发现。我试着观看关于人们制作已完成状态机的视频,但他们只是多次获得相同的GameObject (例如:https://youtu.be/dYi-i83sq5g?t=409 )。
那么,是否有一种方法可以拥有一个开始函数,或者只获得一个元素一次?我可以做一个只在第一次调用并获得GameObject的bool,但是如果在我的函数中运行,这将是“无用的”。
有什么建议吗?谢谢
发布于 2018-10-11 16:47:55
不,与MonoBehaviour不同,StateMachineBehaviour没有Start消息,只有OnStateEnter、OnStateExit、OnStateIK、OnStateMove和OnStateUpdate。
也有Awake和OnEnable,但是我很确定它们在StateMachine中没有使用,而且可能不像预期的那样运行。
但是,您可以使用OnStateMachineEnter
在转换到StateMachine时,在第一个更新框架上调用。在转换为StateMachine子状态时不调用这一点。
或者使用简单的bool标志,比如
bool alreadyExecuted = false;
OnStateEnter()
{
if(alreadyExecuted) return;
// Do your stuff
alreadyExecuted = true;
}(只是猜测)
在检查器中,实际上可以启用和禁用类似于StateMachineBehaviours的组件。所以它也可以在脚本中这样做
enabled = false;但是我没有在API中找到任何关于它的信息,而且由于我目前在智能手机上,所以我无法测试它。
https://stackoverflow.com/questions/52763286
复制相似问题