实例化(续)

概要

实例化有许多方便的用途。 一目了然,通过实例化您拥有:

  • 细分场景,使它们更易于管理的能力。
  • 一种同时管理和编辑多个节点实例的工具。
  • 一种组织和嵌入复杂游戏流甚至UI(在Godot中,UI元素也是节点)的方式。

设计语言

但实例化场景带来的最大优势在于它可以作为一种优秀的设计语言。这将Godot与其它所有引擎区分开来。Godot就是围绕这个概念从头开始设计的。

在使用Godot制作游戏时,推荐的方法是忽略大多数常见的设计模式,如MVC或实体关系图,而是以更自然的方式思考场景。 首先想象一下游戏中可见的元素,这些元素可以由任何人而非仅仅是由程序员命名。

例如,这是一个简单的射击游戏可以想象的方式:

../../_images/shooter_instancing.png

对于几乎任何类型的游戏,都可以想出这样的图表。写下游戏可以看见的部分,然后添加箭头以表示组件之间的从属关系。

一旦得到这样的图,制作游戏的推荐过程就是为图中列出的每个元素创建一个场景。使用实例化(通过代码或直接在编辑器中)实现从属关系。

在编程游戏(或一般软件)上花费的大量时间主要用于设计架构并使游戏组件适合该架构。基于场景的设计取代了这种方法,使开发更快、更直接,允许专注于游戏逻辑本身。因为大多数游戏组件直接映射到场景,所以使用基于场景实例化的设计意味着需要很少的其他架构代码。

我们来看看另一个更复杂的开放世界类游戏的示例,它有很多素材和嵌套元素:

../../_images/openworld_instancing.png

看看房间(Room)元素。 比方说,我们从这里开始。可以制作几个不同的房间场景,其中包括不同的家具(也包括场景)。之后,可以制作房屋(House)场景,连通房间以构成其内部。

然后,可以制作一个由许多实例化的房屋组成的城堡(Citadel)场景。接着,可以开始做世界地图地形(Terrain),并将城堡添加进去。

之后,可以创建代表守卫(和其他NPC)的场景,并将它们添加到城堡中。因此,它们将间接地添加到整个游戏世界中。

使用Godot,就可以很容易地像这样迭代您的游戏,因为您需要做的就是创建和实例化更多的场景。编辑器UI也被设计成对程序员和非程序员一样友好。一个典型的团队开发过程会涉及2D或3D美术工作者、关卡设计师、游戏设计师、和动画师,他们都可以这个编辑器界面工作。

信息超载!

很多进阶的信息全部同时掉到了你身上。然而,本教程最重要部分是建立一个如何在实际项目中使用场景和实例化的意识。

一旦开始制作游戏并将这些概念付诸实践,这里讨论的所有内容都将成为你的第二天性。现在,不要太担心,继续下一个教程!