主要内容

  • 注释
  • 变量
  • 表达式
  • 函数
  • 流程控制
  • 数据类型

基础

# 单行注释使用 # 书写

# 类

# 声明类
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")的快捷写法

字符串的转义字符

转义字符转义为
\nNewline (line feed)
\tHorizontal tab character
\rCarriage return
\aAlert (beep/bell)
\bBackspace
\fFormfeed page break
\vVertical tab character
\"Double quote
\'Single quote
\\Backslash
\uXXXXUnicode 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

使用setget可以对变量设置和获取的时候进行额外的操作。


# 作为属性的写法
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