[英]Accessing a script from another script at runtime in Unity C#
就像在这里一样,但是不同之处在于它应该是从实例化的预制件完成的,因此我不能将具有要访问的具有变量的脚本的GameObject拖到该脚本中。
这在工作
public ScriptA script;
void Update() {
if (script.varX < 0) {
// . . .
}
}
但是现在我收到“对象引用未设置为对象实例”的错误,我认为这是由于试图访问ScriptA的脚本已附加到实例化的预制件上而引起的。
如何在运行时附加脚本和/或GameObject?
您要使用AddComponent,例如:
ScriptA script = gameObject.AddComponent<ScriptA>() as ScriptA;
请参阅此处的文档: https : //docs.unity3d.com/ScriptReference/GameObject.AddComponent.html
看起来您需要首先找到您的脚本类型, 如果它已经存在于场景中 :
public ScriptA script;
void Start()
{
script = GameObject.FindObjectOfType<ScriptA>();
}
void Update()
{
if(script.variable...)
}
满足链接要求的最佳方法是在实例化后的下一行中填充字段,这样可以避免进行难看且昂贵的Find *调用(我假设可以使执行实例化的脚本知道目标对象是什么)。 ,毕竟它知道实例化的内容和实例化的位置)
值得注意的是,新实例化脚本的Awake()方法将在Instantiate()返回之前被调用,而其Start()将在下一帧的开始处调用,这是两次调用之间的主要区别,因此如果您实例化了脚本需要Awake()中的内容,您应该重构(将内容移动到Start()),或者按照前面的建议使用Find *。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.