在另一个脚本的 Start() Unity C# 之后执行一个脚本的 Start()
Posted
技术标签:
【中文标题】在另一个脚本的 Start() Unity C# 之后执行一个脚本的 Start()【英文标题】:Execute an script's Start() after another script's Start() Unity C# 【发布时间】:2017-10-27 18:28:30 【问题描述】:我想在另一个脚本的 Start() 之前从一个脚本运行 Start()。可能吗?可以选择脚本的执行顺序吗?
【问题讨论】:
【参考方案1】:我不太确定Start()
,但您可以配置Awake
、OnEnable
和Update
的脚本执行顺序。转到菜单编辑/项目设置并设置您的首选项,如manual section 中所述。因此,如果Start
也受到影响,您可能需要进一步调查 - 我相信它与Update
有点相关
一般来说,我会建议谨慎使用此功能。如果您遇到此列表中有太多脚本的情况,这表明存在一些设计问题。
【讨论】:
我 99% 确定Start()
也会受到影响。【参考方案2】:
如果你有一个脚本 (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 个月或更长时间之前是可以的。最糟糕的是,您将项目交给另一个编码员。然后你就有了“不可见”的依赖关系,其中包含你几乎无法调试的新错误,因为它们不在代码中。
【讨论】:
【参考方案3】:您可以做的通常是先执行您想要的脚本,但您会喜欢它。但是,假设您想在第一个脚本的末尾运行另一个脚本,您可以使用它来引用一个函数(将 SecondScriptName 替换为您想要在第一个脚本之后执行的脚本,然后将 FunctionFromSecondScript 替换为来自的函数那个脚本)
<SecondScriptName>().FunctionFromSecondScript();
然后您可以按您希望的任何顺序依次调用所有函数。
如果我犯了错误,请原谅我,因为这是我第一次帮助其他程序员的评论,而我自己目前也是一个萌芽。
希望这会有所帮助:)
【讨论】:
以上是关于在另一个脚本的 Start() Unity C# 之后执行一个脚本的 Start()的主要内容,如果未能解决你的问题,请参考以下文章
问一个简单的问题,用unity3d自己做游戏(业余),脚本方面需要学习c#的哪些方面,只学必要的,
Unity - 脚本的 Awake() 是不是在其他脚本的 Start() 之前运行?
Unity3DUnity 脚本 ③ ( C# 脚本的执行入口函数 | 获取当前游戏物体及物体名称 | 获取游戏物体的 Transform 组件数据 | UnityEngine 命名空间简介 )