主要内容
- 注释
- 类
- 变量
- 表达式
- 函数
- 流程控制
- 数据类型
基础
# 单行注释使用 # 书写
# 类
# 声明类
class_name MyClass
# 声明继承
extends BaseClass
# 为类声明一个图标
@icon("res://path/icon.svg")
# 变量
# 在函数中使用变量的时候可以 `self.x` 或者直接使用 `x` 来请求访问。
## 数字
var a = 5
## 字符串
var s = "Hello"
## array 数组
var arr = [1, 2, 3]
## dict 字典
var dict = {"key": "value", 2: 3}
var other_dict = {key = "value", other_key = 2}
## 无初始化变量声明 null
var typed_var: int
## 自动推导变量类型
var inferred_type := "String"
# 常量 (大写处理)
const ANSWER = 42
const THE_NAME = "Charly"
# 枚举类型, 从 0 开始
enum {UNIT_NEUTRAL, UNIT_ENEMY, UNIT_ALLY}
enum Named {THING_1, THING_2, ANOTHER_THING = -1}
# 内置的向量类型
var v2 = Vector2(1, 2)
var v3 = Vector3(1, 2, 3)
# 导出属性变量
## 无初始化值为 null
@export var number: int
## 可以初始化数值
@export var number: int = 5
#--> 阅读 export 导出属性
# 初始化,在 init 前执行
@onready var carmera: Camera2D = $Line
# 函数
# 函数默认返回的是 -> void
func some_function(param1, param2, param3):
# 内部常量
const local_const = 5
# if 流程控制
if param1 < local_const:
print(param1)
elif param2 > 5:
print(param2)
else:
print("Fail!")
# for 循环
for i in range(20):
print(i)
# while 循环
while param2 != 0:
param2 -= 1
# match 匹配
match param3:
3:
print("param3 is 3!")
_:
print("param3 is not 3!")
var local_var = param1 + 3
return local_var
# 函数命名可以覆盖基类的同名函数
func overwrite(param1: int, param2: String):
# 可以使用 super(...) 来触发基类的函数
super(param1, param2)
# 参数默认值
func function_var_def(param1 := 1) -> int:
return 1
# _init 在对象初始化的时候被调用
# Constructor 是对象构造函数
func _init():
pass
# _ready 在脚本节点以及子节点进入场景树的时候被调用
func _ready():
pass
# _process 在每一帧上都被调用。
func _process(delta):
# 传递给此函数的 delta 参数是时间,即从上一帧到当前帧经过的秒数。
print("Delta 时间为:", delta)
# _physics_process 在每个物理帧上都被调用。
# 这意味着 delta 应该是恒定的。
func _physics_process(delta):
# 使用向量加法和乘法进行简单移动。
var direction = Vector2(1, 0) # 或使用 Vector2.RIGHT
var speed = 100.0
self.global_position += direction * speed * delta
# self 指向当前类的实例
# 内部类
class InnerClass:
extends Object
func hello():
print("来自内部类的 Hello!")
func use_inner_class():
var ic = InnerClass.new()
ic.hello()
ic.free() # 可以自行释放内存
变量类型
基础变量
类型 | 解释 | 例子 |
---|---|---|
null | 空值 | null |
int | 数值 | 1,-1,0xAF |
float | 浮点值 | 1.23, 1e6 |
bool | 布尔值 | true,false |
String | 字符串 | "hello world" |
数值:
- 1 十进制
- 0x8f51 16进制
- 0b101010 2进制
字符串
- "hllo"
- """dddd""" 长字符串
- &"name" StringName 不可变的字符串
- ^"name" 解析为路径 NodePath
- $NodePath get_node("NodePath")的快捷写法
字符串的转义字符
转义字符 | 转义为 |
---|---|
\n | Newline (line feed) |
\t | Horizontal tab character |
\r | Carriage return |
\a | Alert (beep/bell) |
\b | Backspace |
\f | Formfeed page break |
\v | Vertical tab character |
\" | Double quote |
\' | Single quote |
\\ | Backslash |
\uXXXX | Unicode codepoint XXXX (hexadecimal, case-insensitive) |
运算符
数学运算符
运算符 | 解释 |
---|---|
+ | 加 |
- | 减 |
* | 成 |
/ | 除 |
% | 求余 |
-x | 负处理 |
支持便捷写法,x %= 3
等效与 x = x % 3
。
布尔值运算符
运算符 | 解释 |
---|---|
< == > != >= <= | 比较运算符 |
! not | 否定 |
&& and | 并 |
|| or | 或 |
位运算符
运算符 | 解释 | 规则 |
---|---|---|
~ | 取反 | 0变1,1变0 |
<< >> | 左移右移 | 移动后补0 |
& | 逻辑与 | 1 1 的 1 |
| | 逻辑或 | 0 0 的 0 |
^ | 逻辑异或 | 0 0 的 1 |
支持快捷处理,比如 a &= b
。
判定奇偶,末尾0偶数,1为奇数。
(a & 1) == 0
替代a % 2
判定 a 是否为偶数。
setter 和 getter
使用set
和get
可以对变量设置和获取的时候进行额外的操作。
# 作为属性的写法
var a: int = 1:
set(val):
# 其他的操作
a = val
get:
# 其他的操作
return a
# 函数写法
var val: set=_set_val, get= _get_val
func _set_val(new_value):
pass
func _get_val():
return val
注解 export 导出属性
为类型提供外部设定的属性
## 无初始化值为 null
@export var number: int
## 可以初始化数值
@export var number: int = 5
## 使用导入类型
@export var carmera: Camera2D
@export var node: Node
## 按组处理,这里是为UI进行类组处理
@export_group("属性组")
@export var t1: int
@export_subgroup("扩展组")
@export var string = ""
@export var flag = false
## 属性分类(UI层),可以内嵌组
@export_category("分类名称")
@export var t2: String
## 文件路径
@export_file var f
@export_dir var f
## 枚举类型
enum NamedEnum {THING_1, THING_2, ANOTHER_THING = -1}
@export var x: NamedEnum
## 枚举类型
@export_enum(UNIT_NEUTRAL, UNIT_ENEMY, UNIT_ALLY) var t3
注解 onready
在 _ready()
前调用。
# 初始化获取 MyLabel 节点
@onready var my_label = get_node("MyLabel")
续行写法
# 单行
var a = 1 + 2
# 多行, 在行末尾使用 \
var a = 1 + \
2
# 多行
var a = 1 + \
4 + \
4 + \
4
向量类型
- Vector2
- Vector2i
- Rect2
- Vector3
- Vector3i
- Transform2D
- Plane
- Quaternion
- AABB
- Basic
- Transform3D
引擎内置类型
- Color
- NodePath
- RID
- Object
容器类型
Array 数组
Dictionary 字典
Signal 信号
Callable 可执行函数
与加它场景交互
get_tree().change_scene("res://scene_b.tscn")
get_tree().reload_current_sence()
其他
randomize()
# math 包
math.PI