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脚本中。我已经检查了它,但就我的理解而言,它是基于时间的。我已经检查了它,但就我的理解而言,它是基于时间的。这就是我正在做的,但我错误地将剩余的代码放在开始时的“等待”之后。这就是我正在做的,但我错误地将剩余的代码放在开始时的“等待”之后。