目前,我正在开发一个设备系统,它将把游戏对象从列表中实例化到场景中,在此之前,我没有使用实例化系统,只在场景中始终保持游戏对象的活动。
现在,通过实例化Game (Prefab),我在实例化引用时遇到了丢失引用的错误,在此之前,我查看了其他各种文章,如本文讨论的内容:
然而,除了使用标签之外,我还在寻找其他方法,因为这个系统可能会使用大量的标签来减少游戏性能的超时,是否有人知道将引用从场景保存到预制件中的不同方法?
因此,由于这是一个新的系统,我只是在寻找关于如何将场景游戏的引用保存到预制件中的建议,因为我的旧系统只是将活动在场景中的游戏对象保存在场景中,而不是实例化它们,我再次希望听到不同类型的方法,而不仅仅是使用标记。
我试图保存的引用是来自附加到我的预置文件的脚本中的三个转换元素,它们如下
public Transform camPos;
public Transform aimLocation;
public Transform crosshairLocation;目前,我只是将游戏对象从场景中拖放到脚本中的公共字段中。
由于这将是一个主要的系统,我不想使用这个系统的标签。但这绝对是一个有效的选择,我只是在寻找其他方法来将场景游戏对象的引用保存到预制件中,
感谢您抽出时间阅读,如有任何建议将不胜感激!
任何问题只要问!
发布于 2019-04-20 07:18:26
由于明显的原因,无法在预制件中保存场景引用(如果将预置文件实例化到另一个场景,会发生什么情况?)您的预置文件需要在实例化之后发现它需要的对象。我不太喜欢联合中的标记系统(或者使用字符串作为标识符的任何其他系统,有太多的错误空间)。我建议您采取以下三种方法中的任何一种:
camPos = CamPos.Instance.transform;,您可以在单例模式这里上读取它。camPos = transform.root.GetComponentInChildren<CamPos>().transform;更好的是,您可以有一个具有对所有这些对象的引用的组件,并将一个组件附加到根游戏对象。然后,您可以这样做:camPos = transform.root.GetComponent<ReferenceRepository>().CamPos;var weapon = Instantiate<Weapon>(myWeaponPrefab); weapon.CamPos = camPos;注意,当您以这种方式分配公共字段时,只有在调用Start之后才能访问它们。换句话说,它们在Awake中是不可用的。尽管如此,我并不认为制造像目标定位和交叉定位这样的东西是一个非常好的主意。您应该有一个player/人工/典当类,该类可以将此信息提供给其他需要它的对象。
https://stackoverflow.com/questions/55769633
复制相似问题