首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >统一StateMachineBehaviour :启动函数调用一次吗?

统一StateMachineBehaviour :启动函数调用一次吗?
EN

Stack Overflow用户
提问于 2018-10-11 15:00:34
回答 1查看 2.9K关注 0票数 0

我正在统一我的第一个敌人人工智能。我试图用动画控制器制作一个完成状态机来完成它。

我刚刚发现了当AI处于状态时调用的StateMachineBehaviour脚本。它有多个方法,包括OnStateEnter。每一次人工智能进入状态时都被称为。

我的问题只是关于优化,我的AI需要得到的GameObject“播放器”来攻击它。所以我现在在我的OnStateEnter方法中得到它,我觉得很糟糕,因为每当动画被调用时,我都会得到它,我只想在一开始得到它一次。

我基本上需要一个开始功能,但它不起作用,我已经做了研究,但什么也没有发现。我试着观看关于人们制作已完成状态机的视频,但他们只是多次获得相同的GameObject (例如:https://youtu.be/dYi-i83sq5g?t=409 )。

那么,是否有一种方法可以拥有一个开始函数,或者只获得一个元素一次?我可以做一个只在第一次调用并获得GameObject的bool,但是如果在我的函数中运行,这将是“无用的”。

有什么建议吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-11 16:47:55

不,与MonoBehaviour不同,StateMachineBehaviour没有Start消息,只有OnStateEnterOnStateExitOnStateIKOnStateMoveOnStateUpdate

也有AwakeOnEnable,但是我很确定它们在StateMachine中没有使用,而且可能不像预期的那样运行。

但是,您可以使用OnStateMachineEnter

在转换到StateMachine时,在第一个更新框架上调用。在转换为StateMachine子状态时不调用这一点。

或者使用简单的bool标志,比如

代码语言:javascript
运行
复制
bool alreadyExecuted = false;

OnStateEnter()
{
    if(alreadyExecuted) return;

    // Do your stuff

    alreadyExecuted = true;
}

(只是猜测)

在检查器中,实际上可以启用和禁用类似于StateMachineBehaviours的组件。所以它也可以在脚本中这样做

代码语言:javascript
运行
复制
enabled = false;

但是我没有在API中找到任何关于它的信息,而且由于我目前在智能手机上,所以我无法测试它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52763286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档