加载场景和主场景

时间:2017-09-13 12:30:09

标签: unity3d

我正在建立一个手机游戏,我的游戏应该包含

  • 带有进度的加载屏幕

  • 大厅屏幕

  • 游戏画面(加载游戏前加载屏幕)

游戏中没有特殊级别......

请注意,我需要能够在场景之间共享GameObjects,例如我的网络处理程序,它与我的服务器保持连接。

你将如何为此构建场景?场景创作的最佳做​​法是什么?

我可以想到以下选项:

  1. 两个场景:加载场景+主场景并分享游戏对象:

    加载场景将是非常轻量级的场景,它只会存在 加载主场景。它可以显示进度条 主场景加载和网络登录过程的进度。

    优点:应用程序将快速加载(显示加载场景 随着进步)

    缺点:我将不得不分享我的网络处理程序 场景之间(登录后保持连接)。

  2. 两个场景:加载场景+主场景而不共享 GameObjects:

    我希望能够开始加载主场景 异步,但不自动切换到它。我想要的 例如,主场景将启动登录过程,并且仅在何时开始 完成所有初始化任务后,它将通知Loading 它已准备好切换的场景。这可能吗?我可以加载 在后台的场景,实际上是按需切换? 此外,我需要能够从主场景中获得进展 为了在加载进度条中显示它。

    优点:没有 需要GameObjects共享 - 干净且孤立的代码。

    缺点:我是 不确定Unity是否有这种能力......

  3. 一个场景:

    优点:所有共享的游戏对象都在一个地方

    缺点:应用程序的加载时间非常慢(除非有一个 告诉Unity忽略加载几个GameObjects的选项 然后我可以在显示时间的加载屏幕中加载它们。

  4. 谢谢!

2 个答案:

答案 0 :(得分:1)

我建议为不同的屏幕设置三个不同的场景。 您可能在“菜单场景”中有几个“菜单屏幕”。

对于共享游戏对象,您可以在要共享的对象上设置“DontDestroyOnLoad”。来自文档:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Awake() {
        DontDestroyOnLoad(transform.gameObject);
    }
}

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

对于选项2: 我想在完成加载之前场景不会切换到主场景。但是,在加载时可能会有一些延迟,如果您正在显示加载动画(例如,微调器),则可能会显示。

也可以使用SceneManager.LoadSceneAsync,它将在后台加载场景。我自己没有亲身体验过这个,但在主屏幕加载时保持加载屏幕更新可能会有所帮助。 https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html

答案 1 :(得分:1)

我会有3个不同的场景(每个屏幕一个),并使用SceneManagement.LoadScene() UnityEngine.SceneManagement方法从一个场景切换到另一个场景。

要在场景之间共享游戏对象,更常见的是共享数据,您有3个选项:

  • 使用静态类:好分享值
  • 使用DontDestroyOnLoad:使用
  • 时注意不要有重复的对象
  • 将数据存储/加载到文件中

如果您需要有关如何操作的详细信息以及这三种解决方案之间的差异,我建议您使用本教程:https://www.youtube.com/watch?v=WchH-JCwVI8 这是一个小时,但非常有用和完整,一切都在那里。