我想在一个脚本的Start()之前运行另一个脚本的Start()。可以吗?您可以选择脚本的执行顺序吗?
vktxenjb1#
我不完全确定Start(),但是您可以配置Awake、OnEnable和Update的 * 脚本执行顺序 *。转到菜单“编辑/项目设置”,并按照manual section中的描述设置您的首选项。因此,您可能需要进一步调查Start是否也受到影响-我相信它是与Update相关的一般来说,我会建议谨慎使用这个特性。如果你运行nto的情况下,有太多的脚本在这个列表中,这表明一些设计问题。
Start()
Awake
OnEnable
Update
Start
nwlls2ji2#
如果您有一个脚本(A)要在另一个脚本(B)之后运行,我猜这意味着A依赖于B。在这种情况下,您应该让B调用A传递所需的数据。
public class A : MonoBehaviour { public void Init(State state){} } public class B : MonoBehaviour { private State state; void Start() { this.state = SetState(); this.gameObject.GetComponent<A>().Init(this.state); } }
从长远来看,这可能是避免长时间调试的唯一方法。事实上,如果你使用脚本执行顺序,直到你有很多类,并且你已经在项目上工作了6个月或更长时间,这是很好的。最糟糕的是,你把项目交给了另一个程序员。然后你就有了“不可见”的依赖关系,你很难调试新的bug,因为它们不在代码中。
dldeef673#
你可以做的就是先执行你想要的脚本,不管你喜欢它。但是,假设你想在第一个脚本的末尾运行另一个脚本,你可以通过使用下面的语句引用一个函数(用你想在第一个脚本之后运行的脚本替换SecondScriptName,然后用那个脚本中的函数替换FunctionFromSecondScript)
<SecondScriptName>().FunctionFromSecondScript();
然后,您可以按照任何希望的顺序依次调用所有函数。如果我犯了一个错误,请原谅我,因为这是我的第一次评论,以帮助另一个程序员,我目前是一个萌芽一个自己。希望这对你有帮助:)
3条答案
按热度按时间vktxenjb1#
我不完全确定
Start()
,但是您可以配置Awake
、OnEnable
和Update
的 * 脚本执行顺序 *。转到菜单“编辑/项目设置”,并按照manual section中的描述设置您的首选项。因此,您可能需要进一步调查Start
是否也受到影响-我相信它是与Update
相关的一般来说,我会建议谨慎使用这个特性。如果你运行nto的情况下,有太多的脚本在这个列表中,这表明一些设计问题。
nwlls2ji2#
如果您有一个脚本(A)要在另一个脚本(B)之后运行,我猜这意味着A依赖于B。在这种情况下,您应该让B调用A传递所需的数据。
从长远来看,这可能是避免长时间调试的唯一方法。事实上,如果你使用脚本执行顺序,直到你有很多类,并且你已经在项目上工作了6个月或更长时间,这是很好的。最糟糕的是,你把项目交给了另一个程序员。然后你就有了“不可见”的依赖关系,你很难调试新的bug,因为它们不在代码中。
dldeef673#
你可以做的就是先执行你想要的脚本,不管你喜欢它。但是,假设你想在第一个脚本的末尾运行另一个脚本,你可以通过使用下面的语句引用一个函数(用你想在第一个脚本之后运行的脚本替换SecondScriptName,然后用那个脚本中的函数替换FunctionFromSecondScript)
然后,您可以按照任何希望的顺序依次调用所有函数。
如果我犯了一个错误,请原谅我,因为这是我的第一次评论,以帮助另一个程序员,我目前是一个萌芽一个自己。
希望这对你有帮助:)