实例

介绍

创建单个场景并将节点添加到其中可能对小项目有效,但随着项目的大小和复杂性的增加,节点的数量可能很快变得无法管理。为了解决这个问题,Godot允许将一个项目分成任意数量的场景。这为您提供了一个强大的工具,帮助您组织游戏的不同组件。

场景和节点 您了解到场景是以树结构组织的节点集合,其中一个节点作为树根。

../../_images/tree.png

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

../../_images/instancingpre.png

保存场景后,可以将其作为任何其他节点实例化到其他场景中。

../../_images/instancing.png

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

举例说明

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

把这个项目解压到你喜欢的任何地方。然后打开godot并使用“导入”按钮将此项目添加到项目经理:

../../_images/instancing_import.png

浏览到你提取的文件夹,打开你可以在里面找到的“project.godot”文件。完成此操作后,新项目将显示在项目列表中。按“编辑”按钮编辑项目。

这个项目包含两个场景:“ball.tscn”和“main.tscn”。球场景使用 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

按“播放”并观看球落在屏幕底部:

../../_images/instancing_playbutton.png

多个实例

您可以通过再次使用“实例”按钮,或通过单击球实例并按“复制”(ctrl-d)将任意多的实例添加到场景中:

../../_images/instancing_multiball.png

再次运行场景,所有球都将落下。

../../_images/instancing_multiball.gif

编辑实例

打开 Ball 场景并添加 PhysicsMaterial 单击向下箭头并选择“新建物理材质”。

../../_images/instancing_physicsmat1.png

然后,通过单击展开材质,并设置 Bounce 属性到 1 .

../../_images/instancing_physicsmat2.png

按“播放”并注意到所有实例化的球现在更有弹性。由于实例球基于保存的场景,因此对该场景的更改将影响所有实例。

您还可以调整单个实例。将反弹值设置回 0 然后在 Main 场景,选择一个实例球。像这样的资源 PhysicsMaterial 默认情况下在实例之间共享,因此我们需要使其唯一。单击向下箭头并选择“使唯一”。设置其 Bounce1 然后按“播放”。

../../_images/instancing_property.png

请注意,调整后的属性旁边会出现一个灰色的“还原”按钮。当此按钮存在时,意味着您修改了实例场景中的属性以覆盖其在保存的场景中的值。即使在原始场景中修改了该属性,自定义值也将保留。按“还原”按钮会将属性还原为保存的场景中的值。

结论

当您想要创建同一对象的多个副本时,实例化可能很有用。也可以使用gdscript在代码中创建实例,请参见 实例(续) .