GDScript 2.0 快速入门(适合有其它编程语言基础)
从零开始学 GDScript 2.0
Godot 是一款开源、跨平台的游戏引擎,因其轻量、易用和强大的功能而受到广大开发者的喜爱。在 Godot 4 中,GDScript 2.0 进一步升级,提供更完善的静态类型、异步支持与函数式编程特性。本文将带你从零开始,使用 Godot 4 的新用法,逐步掌握 GDScript 2.0。
什么是 GDScript 2.0?
GDScript 2.0 是随 Godot 4 发布的全新版本,保持了与 Python 类似的简洁语法,同时在编译时进行更多检查,并深度集成 Godot 节点系统。
第一个 GDScript 2.0 脚本
在 Godot 中,每个场景由多个节点组成。你可以为节点附加脚本,以定义其行为。以下示例展示了如何在 Godot 4 中注册一个脚本类并使用静态类型:
class_name HelloWorld
extends Node2D
func _ready() -> void:
print("Hello, Godot 4!")
class_name HelloWorld
:将此脚本注册为全局可用类型。extends Node2D
:继承自 Node2D。func _ready() -> void
:明确返回类型为void
。
变量与数据类型
GDScript 2.0 强化了静态类型支持,推荐显式声明:
# 可变变量
var score: int = 0
var player_name: String = "Alice"
var is_alive: bool = true
# 常量
const MAX_LIVES: int = 5
使用 @onready
关键字加载节点引用:
@onready var player: Sprite2D = $Player
控制结构
条件语句
if score > 100:
print("High score!")
elif score == 100:
print("Exactly 100!")
else:
print("Keep trying!")
循环语句
GDScript 2.0 支持更简洁的迭代语法:
# 使用 range
for i in range(5):
print(i)
# 直接迭代数值范围(内置语法)
for i in 5:
print(i) # 0 到 4
函数与参数
func greet(name: String) -> void:
print($"Hello, {name}!")
# 调用
greet("Bob")
信号与事件
内置信号连接
@onready var btn: Button = $Button
func _ready() -> void:
btn.pressed.connect(_on_button_pressed)
func _on_button_pressed() -> void:
print("按钮被按下!")
自定义信号
signal health_changed(new_health: int)
var health: int = 100
func take_damage(amount: int) -> void:
health -= amount
emit_signal(signal: health_changed, health)
func _ready() -> void:
connect(signal: health_changed, callable(self, "_on_health_changed"))
func _on_health_changed(new_health: int) -> void:
print($"生命值: {new_health}")
异步与 Lambda
Lambda 表达式
var double = func(x: int) -> int: x * 2
print(double(4)) # 输出 8
await
异步编程
func play_and_wait() -> void:
$AnimationPlayer.play("run")
await $AnimationPlayer.animation_finished
print("动画播放完毕!")
最佳实践
- 启用静态类型检查:在项目设置中打开类型提示。
- 使用
class_name
:提升脚本复用与自动补全。 - 合理运用
@onready
:延迟加载节点引用。 - 利用信号机制:实现节点间松耦合。
- 避免硬编码:使用
const
或导出变量 (@export var
)。
推荐资源