Godot引擎中CanvasItem、Node2D及自定义节点详解
Godot引擎中CanvasItem、Node2D及自定义节点详解
CanvasItem节点
CanvasItem节点是Godot引擎中一个非常重要的基础节点,它继承自Node节点,因此具备Node节点的所有功能。CanvasItem节点的主要作用是处理2D场景中的绘制和渲染,它支持设置可视化界面和材质的颜色,是所有2D节点和GUI节点的基类。
CanvasItem节点的绘制顺序遵循树的深度优先遍历顺序,但可以通过设置Show Behind Parent
属性来改变最终渲染到屏幕上的画面顺序。
Visible属性
Visible
属性用于控制精灵节点的可视化状态。当设置为true
时,节点将被渲染到屏幕上;当设置为false
时,节点将不会被渲染。
Show Behind Parent属性
当一个节点被设置为Show Behind Parent
时,它将被渲染在父节点的后面。这个属性对于实现一些特殊的视觉效果非常有用。
Modulate属性
Modulate
属性是一个附加在CanvasItem上的贴图,可以用来改变物体的颜色。这个属性相当于给物体额外添加了一个颜色,类似于光线的效果,会附加在物体表面。
Self Modulate属性
Self Modulate
属性与Modulate
属性类似,但它只改变当前节点的颜色,不会影响其子节点。如果使用Modulate
属性,那么父节点的颜色改变会传递给所有子节点;而使用Self Modulate
属性时,只有父节点的颜色会被改变。
Light Mask属性
Light Mask
属性通常与Light2D
节点配合使用,用于控制光照效果。通过在Light2D
节点中添加一张PNG图片并设置其Texture
属性,可以实现光照效果的投影。
在Light2D
节点的Range
属性中可以调整光照的范围和层级。
Material属性
Material
属性用于设置物体的材质,包括色彩、纹理、光滑度、透明度等属性。在Godot中,材质实际上就是Shader,可以通过代码来控制GPU的图像渲染效果。
Material 材质,物体的质地,指色彩,纹理,光滑度,透明度,反射率,折射率,发光度。实际就是Shader
Texture 贴图,附加到物体表面的贴图
Shader 着色器,使用代码来渲染图形的技术,可以控制GPU运算图像效果的一段代码
通过改变Material
的模式,可以实现对物体表面属性的复杂改变。
Use Parent Material属性
如果勾选Use Parent Material
,那么所有子节点都会使用父节点的材质,实现材质的继承。
Ordering属性
Ordering
属性用于控制节点的渲染顺序,其中z_index
属性表示节点在Z轴方向上的位置。z_index
值越大,表示节点越靠近屏幕,显示在更前面。
当两个节点成为父子关系时,z_as_relative
属性默认启用。这意味着子节点的z_index
值会相对于父节点进行计算。例如,如果父节点的z_index
值是1,而子节点的z_index
值是0,但由于z_as_relative
属性被勾选,实际上子节点的z_index
值会计算为1(0+1),显示在父节点的上面。
Node2D节点
Node2D节点继承自CanvasItem节点,因此具备CanvasItem节点的所有功能。Node2D节点的主要属性是Transform
,它包含了位置(Position)、旋转(Rotation)和缩放(Scale)三个基本属性。在后续的脚本编程中,Transform
属性是最常用的。
自定义节点
当现有节点无法满足新的需求时,可以通过创建自定义节点来解决。自定义节点的核心是通过脚本来实现,具体步骤如下:
- 创建一个新的GDScript脚本,命名为
MyNode
,并继承Node2D节点。 - 使用
@icon
注解来设置自定义节点的图标。 - 使用
class_name
关键字来定义自定义节点的名称。 - 使用
@export
注解来导出变量,使其可以在编辑器中直接编辑。
@icon("res://icon.svg")
extends Node2D
class_name MyNode
func _ready():
print("my custom node")
pass
@export var a: int = 1
@export var b: String
保存脚本后,就可以在项目中看到自定义的MyNode
节点,并且可以编辑其中的变量a
和b
。
节点继承
通过继承现有节点,可以改变已有节点的功能。无论是自定义节点还是节点继承,核心都是通过脚本控制来达到想要的效果。例如,可以创建一个继承自Sprite2D
节点的自定义节点,并重写其某些功能。
新建一个名为my_script
的脚本,并将其挂载到Sprite
节点的脚本属性上,就可以改变Sprite
节点的现有功能。