实例化

简介

创建单个场景并向其中添加节点,这可能适用于小型项目,但随着项目规模和复杂度的增长,节点数量可能很快变得无法管理。为了解决这个问题,Godot允许一个项目被分成许多场景。这提供了一个强大的工具,有助于组织游戏的不同组件。

场景与节点 中,你已了解场景是一个以树结构组织的节点的集合,并由单个节点作为树的根节点。

../../_images/tree.png

可以创建任意多的场景并将其保存到磁盘。以这种方式保存的场景被称为“打包场景”,并会有个 .tscn 扩展名。

../../_images/instancingpre.png

一旦场景被保存,它就可以被实例化到另一个场景中,就像它是任何其他节点一样。

../../_images/instancing.png

在上面的图片中,场景B作为实例被添加到A中。

通过示例实例化

要了解实例化如何工作,我们先下载一个示例项目: instancing.zip

解压该项目到任意位置。然后打开Godot,用 导入(Import) 按钮将项目添加到到项目管理器中:

../../_images/instancing_import.png

浏览到解压到的文件夹,然后打开可以在其中找到 project.godot 文件。执行此操作后,新项目将显示在项目列表中。按 编辑(Edit) 按钮编辑项目。

该项目包含两个场景:Ball.tscnMain.tscn。 ball 场景使用 RigidBody2D 来提供物理行为,而主场景有一组用于与球碰撞的障碍物(使用 StaticBody2D)。

../../_images/instancing_ballscene.png ../../_images/instancing_mainscene.png

打开 Main 场景,然后选择根节点:

../../_images/instancing_mainroot.png

我们要添加一个 Ball 场景的实例,作为 Main 场景的子节点。点击“链接”形状的按钮(悬浮框写着 实例化场景文件作为节点。)然后选择 Ball.tscn 文件。

../../_images/instancing_linkbutton.png

这个球会被放置在屏幕区域的左上角(即屏幕坐标 (0, 0))。点击并将球拖到场景顶部中心附近的某处:

../../_images/instancing_placeball.png

按下 运行(Play),会看到球落到场景底部:

../../_images/instancing_playbutton.png

多个实例

You can add as many instances as you like to a scene, either by using the “Instance” button again, or by clicking on the ball instance and pressing Ctrl + D (Cmd + D on macOS) to duplicate it:

../../_images/instancing_multiball.png

再次运行场景,这些球都会落下来。

../../_images/instancing_multiball.gif

编辑实例

Open the Ball scene, expand the PhysicsMaterial by clicking on it, and set the Bounce property to 1.

../../_images/instancing_physicsmat2.png

按下 播放(Play),请注意现在所有被实例化的球会变得更有弹性。因为被实例化的球基于保存过的场景,更改该场景会影响所有实例。

You can also adjust individual instances. Set the bounce value back to 0 and then in the Main scene, select one of the instanced balls. Resources like PhysicsMaterial are shared between instances by default, so we need to make it unique. Click on the tools button in the top-right of the Inspector dock and select “Make Sub-Resources Unique”. Set its Bounce to 1 and press “Play”.

../../_images/instancing_property.png

可以注意到调整后的属性旁边有一个 还原(revert) 按钮。当这个按钮出现,意味着修改了这个实例化场景属性,覆盖了它原有的值。即便再次修改原场景的属性,它的值也会保持不变。按下还原按钮将会把属性值还原为原场景设定值。

总结

当您想创建同一对象的多个副本时,实例化会非常有用。您也可以使用GDScript创建实例(请参阅 编写脚本(续))。