首页 > 解决方案 > 启用 Unity 中另一个场景中存在的游戏对象?

问题描述

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

标签: c#unity3d

解决方案


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

问题是,当加载新场景时,旧场景(在您的案例中要调用的脚本SetActive)已被卸载。

DontDestroyOnLoad

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

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

如果当前场景中的对象在加载的场景中持续存在有助于解决您的问题,则此方法适用。

附加加载场景

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

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

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

请参阅LoadSceneLoadSceneAsyncUnloadSceneAsync

静力学

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

请参阅单例模式


推荐阅读