实例化
简介
创建单个场景并向其中添加节点,这可能适用于小型项目,但随着项目规模和复杂度的增长,节点数量可能很快变得无法管理.为了解决这个问题,Godot允许一个项目被分成许多场景.这提供了一个强大的工具,有助于组织游戏的不同组件.
在 场景与节点 中,你已了解场景是一个以树结构组织的节点的集合,并由单个节点作为树的根节点.
可以创建任意多的场景并将其保存到磁盘.以这种方式保存的场景被称为”打包场景”,并会有个 .tscn
扩展名.
一旦场景被保存,它就可以被实例化到另一个场景中,就像它是任何其他节点一样.
在上面的图片中,场景B作为实例被添加到A中.
通过示例实例化
要了解实例化如何工作,我们先下载一个示例项目: instancing.zip
.
解压该项目到任意位置.然后打开Godot,用 导入(Import) 按钮将项目添加到到项目管理器中:
浏览到解压到的文件夹,然后打开可以在其中找到 project.godot
文件.执行此操作后,新项目将显示在项目列表中.按 编辑(Edit) 按钮编辑项目.
该项目包含两个场景:Ball.tscn
和 Main.tscn
. ball 场景使用 RigidBody2D 来提供物理行为,而主场景有一组用于与球碰撞的障碍物(使用 StaticBody2D).
打开 Main
场景,然后选择根节点:
我们要添加一个 Ball
场景的实例,作为 Main
场景的子节点.点击”链接”形状的按钮(悬浮框写着 实例化场景文件作为节点.
)然后选择 Ball.tscn
文件.
这个球会被放置在屏幕区域的左上角(即屏幕坐标 (0, 0)
).点击并将球拖到场景顶部中心附近的某处:
按下 运行(Play),会看到球落到场景底部:
多个实例
你可以在一个场景中添加任意数量的实例,可以再次使用 “实例化”按钮,也可以点击球的实例,然后按 Ctrl + D`(MacOS上按 :kbd:`Cmd + D)复制它:
再次运行场景,这些球都会落下来.
编辑实例
打开 Ball
场景, 点击 PhysicsMaterial
展开, 然后设置 Bounce
属性为 1
.
按下 播放(Play),请注意现在所有被实例化的球会变得更有弹性.因为被实例化的球基于保存过的场景,更改该场景会影响所有实例.
也可以只调整个别实例. 先将 Bounce
设回 0
,然后在 Main
场景中,选择一个要修改的球. 默认情况下在实例间共享同一个 PhysicsMaterial
这样的资源,因此修改前需要使其独立于其他实例. 点击属性面板右上方的工具按钮,选择”转为独立子资源”,并将 Bounce
设置为 1
,测试修改后的效果.
可以注意到调整后的属性旁边有一个 还原(revert) 按钮.当这个按钮出现,意味着修改了这个实例化场景属性,覆盖了它原有的值.即便再次修改原场景的属性,它的值也会保持不变.按下还原按钮将会把属性值还原为原场景设定值.
总结
当您想创建同一对象的多个副本时,实例化会非常有用.您也可以使用GDScript创建实例(请参阅 编写脚本(续)).