我是Unity的新手 . 我有一个不可见的GameObject,称它为A,只有一个脚本,它多次实例化一个预制B . 我需要B的衍生克隆来引用A,我已经了解到为了使其工作,A必须是预制本身(如果我错了,请纠正我)产生的B对象对鼠标点击做出反应并调用A的方法问题是,在这个被调用的A方法中,A本身的变量具有我不期望的值,例如在Start()中初始化为0并且从未使用的某个变量具有的值12.似乎每个衍生对象B都有对其“自己”A的引用,而A的变量具有随机值 . 我错过了什么?
为了使这个工作,A必须是一个预制本身(如果我错了,请纠正我)
我假设您将预制 B 脚本中的相关字段设置为 A 的预制件,这不是您想要的 . A 根本不必是预制件 .
B
A
预制件是一个序列化的GameObject,它包含特定的共享默认值,可通过编辑器和编辑器/游戏内脚本轻松管理GameObject . 在处理大量类似物体时使用预制件;每个预制实例将与另一个预制实例类似,但少数修改后的属性除外 . 这允许在单击中对预制实例进行大规模实例化修改 . 例如,将枪弹射弹对象存储为预制件允许您通过单击修改所有枪弹的默认大小,同时允许基于每个实例进行属性自定义 . 您可以将预制件视为可用于实例化GameObject的模板 .
当通过 A (以下称为 ScriptA )上的脚本生成预制 B 的实例时,只需将生成的B实例(以下称为 ScriptB )上的脚本上的必填字段设置为 gameObject (或其他一些)字段的 ScriptA ,如下所示:
ScriptA
ScriptB
gameObject
// ScriptA's method which spawns instances of prefab B GameObject bInstance = Instantiate(prefabB); ScriptB scriptOnBInstance = bInstance.GetComponent<ScriptB>(); scriptOnBInstance.referenceToAGameObject = this.gameObject;
1 回答
我假设您将预制
B
脚本中的相关字段设置为A
的预制件,这不是您想要的 .A
根本不必是预制件 .预制件是一个序列化的GameObject,它包含特定的共享默认值,可通过编辑器和编辑器/游戏内脚本轻松管理GameObject . 在处理大量类似物体时使用预制件;每个预制实例将与另一个预制实例类似,但少数修改后的属性除外 . 这允许在单击中对预制实例进行大规模实例化修改 . 例如,将枪弹射弹对象存储为预制件允许您通过单击修改所有枪弹的默认大小,同时允许基于每个实例进行属性自定义 . 您可以将预制件视为可用于实例化GameObject的模板 .
当通过
A
(以下称为ScriptA
)上的脚本生成预制B
的实例时,只需将生成的B实例(以下称为ScriptB
)上的脚本上的必填字段设置为gameObject
(或其他一些)字段的ScriptA
,如下所示: