HOME / 第 6 部分 · 数据与进阶开发 / 第 68 课
MODULE 6 · 数据与进阶开发

第 68 课 · 自定义资源(Resource)

⏱ 预计时长 35 分钟📊 难度 进阶📚 模块 第 6 部分 · 数据与进阶开发

🎯 本课学习目标

把数据从代码里抽出来,做成「配置资源」,改配置不用改代码。本课掌握自定义资源。

📖 详细教学步骤

什么是 Resource?概念

Resource 是 Godot 的数据载体(图片、音频、材质都是资源)。自定义资源 = 定义自己的「数据结构」,还能在编辑器里可视化编辑。

好处:

  • 物品/敌人/关卡做成资源,策划可直接配
  • 数据与逻辑分离,代码更简洁
  • 资源可复用、可继承

创建自定义资源类代码

新建脚本 item_data.gd,继承 Resource:

GDSCRIPTclass_name ItemData
extends Resource

@export var item_name: String = ""
@export var description: String = ""
@export var icon: Texture2D
@export var price: int = 0
@export var power: int = 1
@export var type: String = "weapon"   # weapon / potion / key

创建资源实例操作

  1. 资源面板右键 → 新建资源(New Resource)
  2. 选择 ItemData(你的类名)
  3. 在检查器填属性:名字、价格、图标等
  4. 保存为 sword.tres、potion.tres

💡 这就是「数据驱动」:物品数据全在资源文件里。

代码里使用资源代码

加载资源并使用:

GDSCRIPTextends Node

const SWORD = preload("res://data/items/sword.tres")
const POTION = preload("res://data/items/potion.tres")

var inventory: Array = []

func _ready():
    inventory.append(SWORD)
    inventory.append(POTION)
    for item in inventory:
        print(item.item_name, " 价格:", item.price)

资源数组与商店进阶

一组物品资源做成数组:

GDSCRIPT# shop.gd
@export var items: Array[ItemData] = []   # 检查器拖入多个资源

func show_shop():
    for item in items:
        print("出售:", item.item_name, " - ", item.price)

func buy(item: ItemData, gold: int) -> bool:
    if gold >= item.price:
        return true
    return false

资源继承与子类进阶

资源也可以继承,扩展新类型:

GDSCRIPTclass_name WeaponData
extends ItemData

@export var damage: int = 10
@export var range: float = 2.0

class_name PotionData
extends ItemData

@export var heal_amount: int = 30

资源复用场景实操

搭配场景实例化:制作物品掉落时,用资源驱动:

GDSCRIPT# 掉落物生成(item.tscn + item_data 资源)
func spawn_item(data: ItemData, pos: Vector2):
    var drop = item_scene.instantiate()
    drop.item_data = data     # 把资源赋给掉落物
    drop.position = pos
    add_child(drop)
⚠️
新建资源找不到我的类?

脚本里必须有 class_name 声明,且脚本已保存。可能需要在编辑器里重启/重新加载脚本。

⚠️
改资源没生效?

资源是引用:改 .tres 会同步到所有使用处。若是代码里 new 出来的,要重新赋值。

🧪 动手试一试

🏋️ 课后练习

用 ItemData 资源做 5 种商品(武器/药水/钥匙),做一个小商店 UI,金币够就买走并减钱。

自定义 Resource + 数组 + UI 列表渲染。

💡

资源驱动开发是专业项目标配,越早习惯越好。

💡

Resource 还可以存数组/字典/嵌套资源,功能很强大。

🎓 本课小结

自定义 Resource:class_name + extends Resource + @export 属性 → 编辑器里可视化建资源文件 → 代码 preload 使用;数据与逻辑分离。