04 添加新人物
添加新人物过于麻烦了,于是单开一章。
依赖BaseLib
参考上一章添加对baselib的依赖。这可以省去你很多功夫。
创建池子
需要创建人物独有的卡牌、药水、遗物池各一个。
TestCardPool.cs:
1 | |
TestRelicPool.cs:
1 | |
TestPotionPool.cs:
1 | |
如果你的卡牌、药水、遗物都使用CustomxxxModel,且添加了Pool属性,那么不需要overrideGenerateAllxxx了。
创建人物
人物需要极其大量的资源,推荐新建类继承PlaceholderCharacterModel而不是CustomCharacterModel。你没有的资源直接注释掉以使用原版。教程提供的资源在最下方。
1 | |
自定义人物背景
public override string CustomCharacterSelectBg => "res://test/scenes/test_bg.tscn";
没什么要求,Godot里创建一个新的场景,类型为Control,自己搭建场景即可。参考:

自定义人物
public override string CustomVisualPath => "res://test/scenes/test_character.tscn";
新建一个Node2D类型的场景,如下:
1 | |
其中Visuals,Bounds,IntentPos,CenterPos需要右键勾选作为唯一名称访问,出现%即可。名字不要改。
创建一个现在不需要了。NTestCharacter.cs,继承CreatureVisuals。然后把它挂载到TestCharacter节点上。
Bounds就是你的人物hitbox的大小,如果你觉得血条太短调整一下它的大小。
- 人物显示在x轴上方。
- 如果想使用3d模型,新建
visuals→subviewportcontainer→subviewport的层级结构,然后在subviewport中添加camera3d和任意3d模型,在3d视图中调整视角至2d视图正常显示。最后设置subviewport的transparent为true。

人物动画
其中
Visuals可以更改成任意继承了Node2D的类型,例如SpineSprite,Sprite2D或是AnimatedSprite2D,或者在它之下新建节点都可。如果要自然支持Spine播放,需要把
Visuals改成SpineSprite,且你的战斗人物模型需要有idle_loop(待机循环),attack(攻击动作),cast(能力卡动作),hurt(受伤),die(死亡)这些动画名。如果你只有一张图,那么把
Visuals改成Sprite2D类型更改图片即可。此外
baselib支持使用AnimationPlayer控制动画,例如你使用AnimatedSprite2D或者是3D模型。虽然AnimationPlayer放在任意位置都可以,但推荐把根节点之下。动画名和上方设置的一致即可自动播放动画。例如:如果是使用
AnimatedSprite2D,设置好临近FPS(例如0.2秒),然后前往Visuals节点点击属性Frame右侧的钥匙插入关键帧,重复修改当前帧和插入关键帧即可。参考:https://docs.godotengine.org/en/stable/tutorials/2d/2d_sprite_animation.html#sprite-sheet-with-animationplayer
自定义能量表盘
public override string CustomEnergyCounterPath => "res://test/scenes/test_energy_counter.tscn";
创建一个Control类型的新场景,设定以下结构:
1 | |
- 后面标
%的需要作为唯一名称访问。名字不要改,label也是。 - RotationLayers里放需要旋转的图层。没有也行。
- 粒子动画节点参考原版设置,或者建议你直接复制最下方提供的tscn。

然后创建一个继承NEnergyCounter的类,挂载到父节点上。
1 | |
保存一下然后关闭这个场景,然后开始神秘操作。在本地,或者是你的ide里打开这个tscn文件,先修改开头,
- 在
ext_resource这一组(推荐ext最下面,sub最上面)添加mega_label这一行。 - 添加
kreon_bold_shared_font这一行。 - 在
sub_resource这一组添加FontVariation_kreon_bold_shared_font,base_font,spacing_glyph这三行。 - 修改
load_steps,改为原来的数字+3。(ext数量+sub数量+1)
1 | |
- 然后往下,找到
[node name="Label" type="Label" parent="."]这一行,添加以下两行。
1 | |
- 然后不要再打开这个文件。如果你想修改,保存以后重复以上内容。
- TODO:或者你也可以通过新建一个继承
MegaLabel的类挂载,把反编译的字体资源复制到本地以省去以上工作。
本地化文件
创建{modId}/localization/{Language}/characters.json,填写以下内容:
1 | |
不要忘记在你的Init初始化函数中添加ScriptManagerBridge.LookupScriptsInAssembly(typeof(Entry).Assembly);这一行。
- 打开
项目→项目设置,把将文本资源转换为二进制禁用。


附赠资源


test_bg.tscn:
1 | |
test_character.tscn:
1 | |
test_energy_counter.tscn:
1 | |