c# - 启用 Unity 中另一个场景中存在的游戏对象?
问题描述
GameObject.SetActive(true);
当我通过当前场景中的脚本执行上述操作时,如何设置另一个场景中存在的游戏对象 true/false ?
解决方案
正如@Eddge 所说,您无法从未加载的场景中访问对象。 场景对象实际上是在加载场景时创建的,因此之前无法访问它们。
问题是,当加载新场景时,旧场景(在您的案例中要调用的脚本SetActive
)已被卸载。
DontDestroyOnLoad
加载新场景时不要破坏目标对象。新场景的加载会破坏所有当前场景对象。在关卡加载期间调用
Object.DontDestroyOnLoad
以保留对象。
-- https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html
如果当前场景中的对象在加载的场景中持续存在有助于解决您的问题,则此方法适用。
附加加载场景
对于DontDestroyOnLoad
没有剪切的情况,可以在不卸载旧场景的情况下加载新场景,让您有机会在两者之间传递信息。
(这实际上是 DontDestroyOnLoad 所做的,因为它将目标对象放入名为 DontDestroyOnLoad 的“场景”中,永远不会被卸载)
您可以使用SceneManagement.LoadScene
with 模式LoadSceneMode.Additive
来实现这一点。请注意,在您卸载第一个场景之前,这两个场景将同时处于活动状态!
请参阅LoadScene、LoadSceneAsync和UnloadSceneAsync。
静力学
您还可以简单地将数据存储在静态字段中,这些字段会在您的应用程序的整个生命周期中保留,以跨场景保留数据和引用。这可能是传递一些原始类型的更简单的解决方案,但请记住它们是globals,因此具有相同的缺点。
请参阅单例模式
推荐阅读
- python - 使用 python 在 MacOSX 上使用 ChromeDriver 时显示错误
- java - 创建帐户时出现条带连接错误
- php - 可变值错误,Laravel,Blade
- odoo - 发票行“price_by_pricelist”中的字段
- jhipster - JHipster Registry v3.3.0 上的微服务状态已关闭
- android - 领域迁移错误“已添加属性‘x’”
- php - 我在一个寻呼机上有一个选择标签,我希望在选择某个选项时出现另一个选择标签
- javascript - 如何通过字符串中的数据属性获取元素并在 node.js 应用程序中获取内部文本?
- python - 从字符串中提取姓名和号码
- javascript - 名为“[DEFAULT]”的 Firebase 应用程序已存在 REACT