GDscript中的类

发布时间:2026/6/26 17:51:50
GDscript中的类 可以把 GDScript 里的“类”理解成一个可以复用的高级变量包。它不仅能存数据变量还能自带处理这些数据的工具函数。GDScript 的类很灵活主要有这几种形式1. 基础用脚本文件定义类在 Godot 里你每新建一个.gd脚本文件如果它extends继承了某个节点或类那它本身就成了一个类文件名就是类名。比如创建一个Player类分两步新建一个player.gd脚本。在脚本里可以定义属于这个类的变量属性和函数方法。# player.gd extends Node2D # 变量属性 var health : 100 var speed : 400.0 # 函数方法 func take_damage(amount: int) - void: health - amount if health 0: print(玩家被击败了) func move(input_direction: Vector2) - void: # 用 speed 来计算移动 pass之后只要把这个脚本挂到一个Node2D节点上那个节点就有了health、speed这些属性以及受伤和移动的功能。2. 进阶创建“纯数据类”如果你只需要一个装数据的容器不想让它继承节点可以在脚本开头用class_name关键字把它注册成一个全局可用的新类型。这很像其他语言里“结构体”的概念。# loot_item.gd class_name LootItem extends RefCounted # 继承这个基类会被自动管理内存 var name : var icon: Texture2D var value : 0这样一来在其他任何脚本里你都可以直接写var sword LootItem.new()来创建一个战利品完全不用关心场景和节点。3. 特殊内建类写在另一个类或函数里面的类一般用来做临时数据或局部工具。func _ready(): # 定义一个只在 _ready 里有效的类 class TempData: var id: int var result: bool # 直接使用它 var data TempData.new() data.id 14.一切皆对象一切皆类所以可以知道在 Godot 引擎里一切皆对象一切皆类。你拖到场景里的Sprite2D精灵、CollisionShape2D碰撞形状、Button按钮它们本身就是一个个写好的类。当你让脚本extends Sprite2D时就是在说“我要用 Sprite2D 的所有功能并往里面添加属于我自己的新东西变量和函数。”我们可以打个比方来理清关系节点是“模板类”就像盖房子的地基和框架图纸是引擎用C写好的基础你只能直接用它。脚本是“定制类”就像在框架图纸上画的装修设计图它不能独立存在必须画在框架图纸节点上才有意义。场景是“组合类”把装修好的多个房间节点组合成一个完整的户型图。1.节点是“引擎内置类”你从节点列表里拖出来的CharacterBody2D、Sprite2D等本身就是类是官方用 C 写好、打包在引擎里的。这些内置类定义了最基础的功能比如Sprite2D类有texture属性知道如何显示一张图。2.脚本是“扩展子类”当你新建脚本第一行写下extends CharacterBody2D时你就在定义一个全新的类——它继承了CharacterBody2D的所有基础功能并添加了你写的var speed、func move()等内容。这个新类通常被称为脚本类。