本文最后更新于94 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
角色数据类(character_data.gd)
角色应该有一套数据模板,此时可以定义一个CharacterData类,令其继承至Resource类。此时这个类:
- 1. 可序列化 – 可以保存到文件
- 2. 可复用 – 一个资源可以被多个场景/节点共享
- 3. 编辑器友好 – 在检查器中直接编辑
- 4. 内存高效 – 引用计数,不会重复加载
- 5.可以保存为.tres文件直接在编辑器内修改并在任何地方可以服用定义好的.tres文件, 比如”英雄”模板, “哥布林”模板. 把这些模板的数据直接赋给新角色.
extends Resource
class_name CharacterData
@export var character_name: String = "英雄"
@export_multiline var description: String = "一个勇敢的战士。"
@export_group("核心属性")
@export var max_hp: int = 100
@export var current_hp: int = 100
@export var max_mp: int = 50
@export var current_mp: int = 50
@export var attack: int = 10
@export var defense: int = 5
@export var speed: int = 7
@export_group("视觉表现")
@export var color: Color = Color.BLUE # 为原型阶段设置的角色颜色
其中@export用于直接在右侧“检查器”修改数值
场景中角色部分(CharacterScene/Character.gd)
extends Node2D
class_name Character
@export var character_data: CharacterData
# 运行时从CharacterData初始化的核心战斗属性
var character_name: String
var current_hp: int
var max_hp: int
var current_mp: int
var max_mp: int
var attack: int
var defense: int
var speed: int
# 引用场景中的节点
@onready var hp_label = $Container/HPLabel
@onready var name_label = $Container/NameLabel
@onready var character_rect = $Container/CharacterRect
extends Node2D表示这是一个要在场景中显示和交互的脚本,全局中注册为Character。@export var character_data: CharacterData是为了能在右边编辑器创建一栏,能把现有的.tres角色模板拖进去。
用@onready在初始化时就将变量名“hp label”等绑定到这些子节点上以便后面的函数能够修改这些节点。
