C# 如何等待一个GameObject实例从另一个GameObject实例完成自己的启动';让我们从团结开始?

C# 如何等待一个GameObject实例从另一个GameObject实例完成自己的启动';让我们从团结开始?,c#,unity3d,C#,Unity3d,我有两个像这样的GameObjects: public class GOA : MonoBehaviour { void Start() { ... do something ... } } public class GOA : MonoBehaviour { public bool IsInitialized { get; private set;} void Start() { ... do something .

我有两个像这样的
GameObject
s:

public class GOA : MonoBehaviour
{
    void Start()
    {
     ... do something ...
    }
}
public class GOA : MonoBehaviour
{
    public bool IsInitialized { get; private set;}

    void Start()
    {
        ... do something ...
        IsInitialized = true;
    }
}
另一个对象以这种方式依赖于第一个对象:

public class GOB : MonoBehaviour
{
    void Start()
    { 
     // wait GOA has terminated own "Start" life cycle
     ... then do something ... 
    }
}

我怎样才能使
GOB:Start()
等待
GOA:Start()
终止?

我已经做了那件事,级联初始化。我发现的诀窍是:

public class GOA : MonoBehaviour
{
    public bool isInitialized = false;

    void Start()
    {
        // ... do something ...
        isInitialized = true;
    }
}
然后,在类B中,我在
Update()
方法中初始化。我使用布尔值来确保初始化只发生一次

public class GOB : MonoBehaviour
{
    public bool isInitialized = false;
    var a = GameObject.Find("A");

    void Update() //Update ! Not Start()
    {
        if (!isInitialized  && a.GetComponent<GOA>().isInitialized)
        {
            // initialize B...
            isInitialized = true;
        }
    }
}
公共类GOB:单一行为
{
公共布尔值初始化=假;
var a=GameObject.Find(“a”);
void Update()//更新!不开始()
{
如果(!isInitialized&&a.GetComponent().isInitialized)
{
//初始化B。。。
isInitialized=true;
}
}
}

我已经做了那件事,级联初始化。我发现的诀窍是:

public class GOA : MonoBehaviour
{
    public bool isInitialized = false;

    void Start()
    {
        // ... do something ...
        isInitialized = true;
    }
}
然后,在类B中,我在
Update()
方法中初始化。我使用布尔值来确保初始化只发生一次

public class GOB : MonoBehaviour
{
    public bool isInitialized = false;
    var a = GameObject.Find("A");

    void Update() //Update ! Not Start()
    {
        if (!isInitialized  && a.GetComponent<GOA>().isInitialized)
        {
            // initialize B...
            isInitialized = true;
        }
    }
}
公共类GOB:单一行为
{
公共布尔值初始化=假;
var a=GameObject.Find(“a”);
void Update()//更新!不开始()
{
如果(!isInitialized&&a.GetComponent().isInitialized)
{
//初始化B。。。
isInitialized=true;
}
}
}

我觉得您正在寻找脚本执行顺序()。 编辑->项目设置->脚本执行顺序。 使用“+”添加脚本


将GOA设置为-100,GOB设置为+100。wat GOA将在GOB的start方法之前调用其start方法。

我觉得您正在寻找脚本执行顺序()。 编辑->项目设置->脚本执行顺序。 使用“+”添加脚本


将GOA设置为-100,GOB设置为+100。wat GOA将在GOB的start方法之前调用其start方法。

start
方法可以是一个协同程序。
你可以这样写:

public class GOA : MonoBehaviour
{
    void Start()
    {
     ... do something ...
    }
}
public class GOA : MonoBehaviour
{
    public bool IsInitialized { get; private set;}

    void Start()
    {
        ... do something ...
        IsInitialized = true;
    }
}
下面是您的GOB脚本:

public class GOB : MonoBehaviour
{
    public GOA aInstance;
    IEnumerator Start()
    { 
     // wait GOA has terminated own "Start" life cycle
     yield return new WaitUntil(() => aInstance.IsInitialized);
     ... then do something ... 
    }
}

另外,不要忘记使用System.Collections.Generic包含
在GOB脚本中。

开始
方法可以是协同程序。
你可以这样写:

public class GOA : MonoBehaviour
{
    void Start()
    {
     ... do something ...
    }
}
public class GOA : MonoBehaviour
{
    public bool IsInitialized { get; private set;}

    void Start()
    {
        ... do something ...
        IsInitialized = true;
    }
}
下面是您的GOB脚本:

public class GOB : MonoBehaviour
{
    public GOA aInstance;
    IEnumerator Start()
    { 
     // wait GOA has terminated own "Start" life cycle
     yield return new WaitUntil(() => aInstance.IsInitialized);
     ... then do something ... 
    }
}

另外,不要忘记使用System.Collections.Generic包含
在GOB脚本中。

我已经检查了它,但就我的理解而言,它是基于时间的。我已经检查了它,但就我的理解而言,它是基于时间的。这就是我正在做的,但我错误地将剩余的代码放在开始时的“等待”之后。这就是我正在做的,但我错误地将剩余的代码放在开始时的“等待”之后。