Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

GDScript 参考

GDScript 是一种面向对象的高级指令式渐进类型编程语言,专为 Godot 构建。GDScript 的语法基于缩进,与 Python 等语言类似。设计 GDScript 这门语言旨在对 Godot 引擎进行优化,与 Godot 引擎紧密集成,从而为内容的创建与继承提供灵活的手段。

GDScript 是完全独立于 Python 存在的,二者之间并不不存在继承与扩展关系。

历史

备注

关于 GDScript 历史的文档已移至常见问题

GDScript 示例

考虑到部分开发者了解过编程语法,学起GDScript来可能会快些,因此这里给出一个 GDScript 的简单示例供参考学习。

# Everything after "#" is a comment.
# A file is a class!

# (optional) icon to show in the editor dialogs:
@icon("res://path/to/optional/icon.svg")

# (optional) class definition:
class_name MyClass

# Inheritance:
extends BaseClass


# Member variables.
var a = 5
var s = "Hello"
var arr = [1, 2, 3]
var dict = {"key": "value", 2: 3}
var other_dict = {key = "value", other_key = 2}
var typed_var: int
var inferred_type := "String"

# Constants.
const ANSWER = 42
const THE_NAME = "Charly"

# Enums.
enum {UNIT_NEUTRAL, UNIT_ENEMY, UNIT_ALLY}
enum Named {THING_1, THING_2, ANOTHER_THING = -1}

# Built-in vector types.
var v2 = Vector2(1, 2)
var v3 = Vector3(1, 2, 3)


# Functions.
func some_function(param1, param2, param3):
    const local_const = 5

    if param1 < local_const:
        print(param1)
    elif param2 > 5:
        print(param2)
    else:
        print("Fail!")

    for i in range(20):
        print(i)

    while param2 != 0:
        param2 -= 1

    match param3:
        3:
            print("param3 is 3!")
        _:
            print("param3 is not 3!")

    var local_var = param1 + 3
    return local_var


# Functions override functions with the same name on the base/super class.
# If you still want to call them, use "super":
func something(p1, p2):
    super(p1, p2)


# It's also possible to call another function in the super class:
func other_something(p1, p2):
    super.something(p1, p2)


# Inner class
class Something:
    var a = 10


# Constructor
func _init():
    print("Constructed!")
    var lv = Something.new()
    print(lv.a)

如果你以前有过使用 C、 C++ 或 C# 之类的静态类型语言编程经验,却从未使用过动态类型编程语言,建议阅读此教程: GDScript:动态语言入门

语言

下面是有关 GDScript 的一些概述。对于 GDScript 更为详细的信息,如哪些方法可用于数组或其他对象,可以在链接的类描述中查找到。

标识符

仅限于含字母字符( azAZ )、 数字( 09 )和下划线 _ 的字符串可作为标识符。同时,标识符不能以数字开头,且大小写敏感(如 fooFOO 就是两个不同的标识符)。

标识符现在也允许包含 UAX#31 所提供的部分 Unicode 字符,也就是说,你现在也可以将非英文字符作为标识符使用。然而, Unicode 字符中易与 ASCII 字符混淆的字符以及颜文字则是无法作为标识符使用的。

关键字

以下是该语言支持的关键字列表。由于关键字是保留字(记号),故不能用作标识符。操作符(如 innotandor)及下列内置类型的名称也是保留字。

想深入了解关键字的话,可在 GDScript 词法分析器中找到对于关键字的定义。

关键字

描述

if

if/else/elif

elif

if/else/elif

else

if/else/elif

for

for

while

while

match

match

break

退出当前 forwhile 循环的执行。

continue

立即跳到 forwhile 循环的下一个迭代。

pass

语法上要求在不希望执行代码的语句中使用,例如在空函数中使用。

return

从函数当中返回一个值。

class

定义一个内部类。见 内部类

class_name

将脚本定义为具有指定名称的全局可访问类。见 注册具名类

extends

定义当前类继承什么类。

is

检测变量是否继承自给定的类,或检测该变量是否为给定的内置类型。

in

通常情况下用来检查字符串、列表、范围、字典、节点中是否存在某个值,而和 for 关键字连用时,则用于遍历字符串、列表、范围、字典、节点中的内容。

as

尝试将值转换为给定类型的值。

self

引用当前类实例。

signal

定义信号。

func

定义函数。

static

将一个函数声明为静态函数,或将一个成员变量声明为静态成员变量。

const

定义常量。

enum

定义枚举。

var

定义变量。

breakpoint

用来设置脚本编辑器辅助调试断点的关键字。与在脚本编辑器每行最左侧点击红点创建断点不同, breakpoint 关键字可以储存在脚本内部。在不同机器上使用版本工具时,由 breakpoint 关键字创建的断点仍旧有效。

preload

预加载一个类或变量,参见 类作为资源

await

等待信号或协程完成,参见等待信号和协程

yield

以前的版本中用于协程,现保留为关键字,方便迁移。

assert

断言条件,如果失败则记录错误。在非调试版本中忽略掉断言语法。参见 Assert 关键字

void

用于代表函数不返回任何值。

PI

PI(π)常数。

TAU

TAU(τ)常数。

INF

无穷常量,用于比较和计算结果。

NAN

NAN(非数)常量,用作计算后不可能得到的结果。

运算符

下面是支持的运算符列表及其优先级(越靠上运算优先级越高)。

运算符

描述

( )

分组(优先级最高)

括号其实不是运算符,但是能够让你显式指定运算的优先级。

x[index]

下标

x.attribute

属性引用

foo()

函数调用

await x

等待信号和协程

x is Node

类型检查

另见 is_instance_of() 函数。

x ** y

幂(乘方)

x 与其自身相乘