是否启用Unity中另一个场景中存在的gameObject?

时间:2019-07-30 15:02:26

标签: c# unity3d

当我通过当前场景中的脚本执行上述操作时,如何设置另一个场景中存在的gameObject true / false GameObject.SetActive(true);

1 个答案:

答案 0 :(得分:3)

正如@Eddge所说,您无法从未加载的场景访问对象。 场景对象实际上是在场景加载时创建的,因此之前无法访问它们。

问题在于,当加载新场景时,旧场景(在您的情况下带有要调用SetActive的脚本)已被卸载。

DontDestroyOnLoad

  

加载新场景时,请勿破坏目标对象。   新场景的负载会破坏所有当前的场景对象。调用Object.DontDestroyOnLoad以在关卡加载期间保留对象。

-https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

如果将当前场景中的对象保留在加载的场景中有助于解决您的问题,这是合适的。

LoadScene累加

对于DontDestroyOnLoad没有剪切的情况,可以在不卸载旧场景的情况下加载新场景,从而使您有机会在两者之间传递信息。

(这实际上是DontDestroyOnLoad所做的,因为它将目标对象放到名为DontDestroyOnLoad的“场景”中,永远不会卸载)

您可以将SceneManagement.LoadSceneLoadSceneMode.Additive模式一起使用来实现此目的。请注意,在卸载第一个场景之前,这两个场景将同时处于活动状态!

请参见LoadSceneLoadSceneAsyncUnloadSceneAsync

统计

您还可以简单地将数据存储在应用程序生命周期中始终保留的静态字段中,以在整个场景中保留数据和参考。 传递一些原始类型可能是一个更简单的解决方案,但是请记住,它们是 globals ,因此也存在相同的缺点。

请参见Singleton pattern