特性
渲染顺序
GD Script
if & for
if
if
1 | if a == 12: |
match
1 | match unit_aligment: |
类似
witch
,但是不用break
for
1 | for item in items: |
1 | for i in 8: |
1 | var glass = 0.0 |
跳出break
& continue
声明变量
显式声明变量的类型(之后无法更改)
下面两个声明效果一样,使用:=
为推断类型,自动确定数据类型
1 | var damage: int = 15 |
@export - 将变量暴露给检查器
1 |
此时设置的值为默认值,可以在检查器中更改
常量
1 | const GRAVITY = -9.81 |
枚举Enums
1 | enum Alignment { |
在枚举中使用@export
1 |
自定义枚举的值
1 | enum Alignment { |
函数Func
一个具有输入输出的函数
1 | func _ready() -> void: |
指定参数类型,返回类型
1 | func add(num1: int, num2: int) -> int: |
常用函数
randf()
返回 0.0~1.0(包含) 的随机浮点数
1 | func _ready() -> void: |
randi_range()
& randf_range()
返回指定范围的随机数 (整数 & 浮点数)
1 | func _ready() -> void: |
常见数据结构
Vector2
& Vector3
1 | var position2D = Vector2(6, -2) |
数组Array
1 | var items = ["Potion", 3, 6.8] |
可以放置不同数据类型
指定类型
1 | var items: Array[String] = ["Potion", "Feather", "Stolen harp"] |
字典Dict
1 | var players = { |
访问节点
使用路径访问
拖放
1 | $Player/Weapon |
节点路径引用
$Player/Weapon
= get_node(“Player/Weapon”)
ctrl拖放
1 |
节点路径引用,同时创建变量
@onready
确保所有子节点被创建完再访问
一般在访问子节点时使用路径
使用@export访问
1 |
信号Signal
通知发生了某个事件
查看信号的来源与目标
事件发生的源头 → 事件本身 → 要通知的目标
使用信号来连接不同的模块
例如角色升级发送信号给UI模块改变显示,
成就模块解锁成就,角色背包模块获得道具…
节点自带信号
节点界面选择连接
自定义信号
声明信号
1
signal leveled_up
使用代码连接/界面连接
1
signal.connect(method_name)
1
signal.disconnect(method_name)
发送信号
1
signal.emit()
带参数的信号
1 | signal leveled_up(msg) |
在经验值达到20的时候发送升级的信号leveled_up
附带一条消息msg
自定义变量的get & set
生命值改变
1 | signal health_change(new_health) |
自定义set()
- 使用
clamp()
限制了生命值的赋值范围 - 同时发送生命值改变的信号
health_change
机会百分比转换
1 | var chance:= 0.2 |
- chance_pct 为 chance 的百分比显示,自定get和set进行转换
getter/setter不会被调用的情况
- 变量在进行初始化时
- 在一个变量的 setter 函数和 getter 函数内访问 该变量的变量名
类Class
1 | class_name Character |
- 使用
class_name
指定类名 - 给类的属性加上
@export
便于修改
当我们新建一个类时,也相当于新建了一个我们自己的节点
内部类Inner Class
1 | class_name Character |
Equipment
为Character
的内部类
在Character
里使用Equipment.new()
创建Equipment
实例
使用GD Script时的一些良好习惯/规范
- 节点间通信:Call down, Signal up
父节点调用子节点函数,子节点发送信号给父节点
兄弟节点间通信,由父节点将其中一个兄弟节点发出的信号连接到另一个兄弟节点的函数上(这通常在_ready()
函数中完成)
常用节点
Resource
- 数据容器
- 游戏资源文件与游戏程序的中转站(下载的资源文件 -> 转为Resource对象 -> 被节点使用)
- 继承自RefCounted,引用计数器归零时,资源被释放
- 引擎从磁盘加载资源时, 它只加载一次
复制节点时,记得对节点使用的资源进行唯一化处理,因为复制后两个节点使用的是同一资源对象
加载Resource
- load()
使用变量,可以动态/可变的路径加载资源,从磁盘加载无引用的资源时,可能会导致延迟,此时可以使用preload(),或是将资源存储在变量中 - preload()
运行时,资源将在解析脚本时加载,无法使用变量作为动态路径
常用函数
访问节点
get_node()
通过节点路径访问
get_child()
通过节点索引(0,1,2…,-1)访问子节点
get_parent()
访问父节点
get_children()
获取包含所有直接子节点的数组
常用内置单例
官方文档
节点帮助文档
快速进入当前节点文档
全局范围的常量和函数,内置对象
内置 GDScript 常量、函数、注解。
常用快捷键
F
聚焦ctrl + A
添加节点按住Alt
移动当前/选中行代码