unity-game-engine - 了解 Unity3d 中的场景

标签 unity-game-engine game-engine scene

我对 Unity3d 中的场景有些困惑,并且找不到任何有关它们的资源。

  1. 什么时候应该使用场景?例如,在平台游戏中,每个关卡都必须是不同的场景吗?主菜单会是一个场景吗?
  2. 可以叠加场景吗?
  3. Assets 如何在场景之间发挥作用?它们是否附加到每个单独的场景并且每次都必须重新加载。可以指定何时不再需要某项 Assets 吗?
  4. 场景之间/场景之间的接口(interface)如何发送数据? 我知道这是一个广泛的话题,但我不想用多个问题来垃圾邮件。

最佳答案

When should scenes be used? For example in a platformer would every level have to be a different scene? Would the main menu be a scene?

对此没有一般规则。理论上,整个游戏可能只有一个场景。 如何组织场景完全取决于您,并且通常取决于您正在创建的游戏类型。

我认为使用场景至少需要考虑3个特点:

  • 它们是所有预实例化对象的逻辑容器,可能有助于将游戏划分为多个级别/部分。
  • 您可以在场景内的 GameObjectsComponents 之间序列化交叉引用(如果 GO A 需要对 GO B 的引用,并且它们属于对于同一个场景,引用可以序列化,不再需要在运行时查找引用的对象)
  • 当您加载(不是以附加方式)另一个场景时,已加载到内存中的资源会自动释放

Can one overlay scenes?

是的,您可以使用 LoadAdditive 。不幸的是,一旦两个场景都加载到内存中,就没有自动方法来区分属于其中一个或另一个的对象。因此,如果您将添加剂加载到第二级环境,则需要您来跟踪以前的环境并在需要时显式销毁它。

How do assets work between scenes? Are they attached to each individual scene and have to be reloaded every time. Can one specify when an asset is no longer needed?

默认情况下,一旦加载新场景,场景的每个 GameObject 都会被销毁(除非您使用附加场景加载)。让 GameObject 在场景中生存的一种方法是使用 DontDestroyOnLoad 来标记它。

如果您需要共享游戏对象的特定“配置”,您可以将其存储为预制件,并跨场景引用它(但请记住,一旦在场景中,它就是一个预制件实例,因此 GO 与 prefab 共享初始序列化且未覆盖的属性,但同一预制件的 2 个实例是不同的对象)。

How does one send data between scenes/interface between scenes?

有多种方式,具体取决于您想要共享哪种持久数据。

  • 对于特定的 GameObject 实例,使用 DontDestroyOnLoad 让对象继续存在。
  • 如果您有一些不需要附加到特定 GameObject 的配置数据,您可以考虑在 ScriptableObject 内存储 AssetDatabase 并引用它。
  • 如果您的数据必须在不同的游戏 session 中持续存在,您可以考虑将它们存储到 PlayerPrefs 中。

还有另外两种我不喜欢的方式,仅引用它们:

  • 使用静态字段有时可以帮助您做到这一点,但从我的角度来看,它有几个问题
  • 从磁盘保存和加载(在多种情况下可能很有用,但通常这是一种依赖于平台的方式,您可能会遇到一些问题,尤其是在不同的移动平台上)

顺便说一句,这是一个广泛的主题,我希望这个答案可以是一个相当不错的概述。

关于unity-game-engine - 了解 Unity3d 中的场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20916826/

相关文章:

crash - Unity引擎崩溃4.2和4.3 : Execution Engine Exception SIGILL

android - NGUI:如何在实时添加新项目时重置/更新 UIgrid 和 UIScrollBar

c - 将变量分组到 C 中的结构或容器中

iphone - iPhone/Android 游戏引擎

swift - 使用未解析的标识符 'scene'

ios - (Cocos2D) 检测显示的是哪个CCScene?

unity-game-engine - 使用 Kinect 和 OpenNI 在 Unity 中检测手势

android - 在 Oculus GO 触摸板上滑动会触发不应有的 UI 点击

android - 游戏引擎,如何在android中组织动画等?

ios - Xcode:更改 Storyboard场景中的 View 类型