Godot 资源数据建模
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md 将 @user_3c6cb52e/godot-resources-778k 安装到你的 AI 助手中。
技能介绍
它解决什么问题
把物品、属性、敌人配置这些游戏数据硬编码在脚本里,改动一次就要翻代码、重新编译,策划也无法直接调参数。这个技能教你用 Godot 4.x 的 Resource 体系把数据变成可复用的外部资产:数据存在 .tres 或 .res 文件里,在 Inspector 面板中直接编辑,节点通过引用挂载,运行时按需加载。面向 Godot 4.3+。
核心能力与工作流
- 定义资源类:用
class_name声明Resource子类,字段用@export暴露,之后资源类会出现在编辑器的 "New Resource" 对话框里,也能直接作为其他节点的导出类型。 - 实例化为文件:在 FileSystem 面板把资源存成
.tres(文本格式,适合 diff 评审)或.res(二进制,更小更快),在 Inspector 里填字段,无需写代码。 - 挂载到节点:节点上用
@export var data: ItemResource或数组类型@export var loot: Array[ItemResource]引用资源实例。 - 运行时加载:路径固定用
preload,路径可变用load/ResourceLoader.load,大型资产配合线程加载。 - 保存与复制:运行时生成或修改的资源用
ResourceSaver.save落盘;修改共享资源前必须先duplicate(true)。
适用边界与坑点
- 共享引用陷阱:一个
.tres被多个节点引用时是同一个对象,运行时直接改会波及所有使用者并污染文件内容,必须先duplicate。 class_name是必须的:没有它,类不会出现在编辑器新建资源对话框和@export类型列表里。- 导出后
res://只读:运行时写入数据要放user://,ResourceSaver.save到res://只在编辑器里有效。 - 资源不序列化节点:Resource 只存数据,引用场景要用
PackedScene,不要把活跃节点塞进资源里。 - 避免循环引用:A 持有 B、B 又持有 A 时保存/加载可能失败,保持数据图为无环,或用 ID 查表。
preload与load的取舍:preload要求常量路径并随脚本加载;load支持运行时变路径,加载前用ResourceLoader.exists()检查。- 别往
.tres写机密:文本格式会原样打进发行包。 - 别用错场景:节点/场景结构属于 godot-nodes-scenes;保存玩家运行进度属于 save-systems;需要 C# 变体则看 godot-csharp。
使用场景
- 你在做 RPG,需要把物品、武器属性、敌人配置统一存成数据文件,方便美术和策划不改代码就能调整。
- 数值策划要在 Inspector 里直接修改掉落表和对话行的内容,避免每次改数值都找程序改代码重新编译。
- 你希望游戏运行时能根据存档或配置动态加载和保存某些配置资源,而不是启动时全部硬编码进脚本。
- 关卡设计里要把箱子、机关、刷怪点等元数据放到节点上作为引用,运行时根据该资源生成对应逻辑。
适合人员
- Godot 独立开发者,希望把游戏配置从脚本中剥离,交给策划或美术直接在编辑器里维护。
- 数值策划,负责频繁调整属性表、掉落表、对话内容,需要一个不用写代码的编辑入口。
- 关卡策划,需要在场景节点上挂载可复用数据资源,并希望运行时动态读取或修改这些数据。
- 技术美术或工具链开发者,想为团队建立一套标准化的游戏数据资产结构,方便协作和版本管理。