游戏中的DeepSeekDemo,提供了一个良好的,关于如何增加一个新角色的示范。你可以参考其中的文件,来创建你自己的。
为了创建一个新角色,你需要做下面几件事:
a. 增加该角色的逻辑定义
b. 增加该角色的美术资产
c. 在对话中使用
增加一个新角色的定义
请参考DeepSeekDemo/Defines/Character下面的DeepSeek.json。说实话您可以直接将其复制黏贴,随后替换其中的DeepSeek为您自身角色的技术名称。无论如何,在此简单介绍各字段的功能。
TechName: 技术名称。在对话中使用和发布各类名称时,都应使用其技术名称。
nameKey: 角色名称。如果不考虑本地化直接写名字就行。
descKey: 角色描述。会出现在记忆里,如果不考虑本地化直接写描述就行。
textAnimatorStyleTag: 见可用的文本样式
comments: 获取协议时的评论,太麻烦了先跳过。
initialCharacterStates: 初始时的状态。配Idle通常就行了。
initialTransform: 除非你知道自己在做什么,否则一律写-7.2。
defaultBodySkin: 填Normal
defaultEyesSkin: 填Normal
defaultMouthSkin: 填Normal
spineAssetPath: 填你想要引用的那个Spine动画。譬如说Spine/Deekseek.skel.bytes
portrait: 头像。填引用的路径。
emailPortrait: 邮件头像。同上。
liveInfoList: 连线时的角色信息。
allowDanmakuType: 连线这个角色时,新增允许的弹幕。建议先不配。
mainAudioEvents: 这个角色说话时的音效。见可用的音效表
voiceFrequencyUnits: 通常配3,除非你清楚自己在做什么
lipsFrequency: 通常配3,除非你清楚自己在做什么
增加美术资产
本游戏使用Aseprite + Spine,来制作角色的立绘与动画。
绘制和拆分角色的立绘
您未必需要使用Aseprite,任何美术工具,譬如PS或其他像素画工具,都可以被用来绘制角色。AI生成的美术资产是可接受的,前提是您做了基本的处理,详见AI美术资产的处理。
您需要注意下列技术规格:
a. 角色的整个画布尺寸是256x144。在2k屏下,会被放大4倍至1024x576。
b. 角色的情绪,譬如Sad、Happy等,是通过开关角色的眼睛/嘴巴的特定图层组来实现的。因此,如果您希望支持这个角色的情绪状态,您需要为其增加Eyes和Mouth下面对应的情绪状态的文件夹。
c. 如果您希望角色播放眨眼动画,您还需要准备眼睛的Open/Close差分。
d. 如果您希望角色播放说话动画,您还需要准备嘴巴的Lips_00,Lips_01,Lips_02,这对应了角色不同的开口幅度,在不说话时会处于Lips_00。
e. 如果你遵循了特定的命名规范,那么您在将这个aseprite文件导出为psd后,可以被Spine直接消费,并自动设置对应的皮肤与槽位,而无需额外的工作。具体而言:
Accessory(可选)
-Normal
Attachment1
Attachment2
-Skin1(可选,如果这个角色有女仆装之类的其他形态,下同)
Attachment1
Attachment2
-Skin2
Attachment1
Attachment2
FrontHair(可选……虽然大部分时候都有)
各种头发,名字随便起
Mouth
-Normal
Lips_00
Lips_01
Lips_02
-Sad
Lips_00
Lips_01
Lips_02
-Fear
Lips_00
Lips_01
Lips_02
Eyes
-Normal
Open
Close
-Sad
Open
Close
-Fear
Open
Close
Body
-Normal
Idle
Salute_01
Salute_02
-Skin1(可选,如果这个角色有女仆装之类的其他形态,下同)
Idle
Salute_01
Salute_02
-Skin2
Idle
Salute_01
Salute_02
如果你遵循了上面的命名规范,那么您就可以通过下面提供给您的两个脚本,来自动重命名这这些文件夹和组件。
Transclude of normalize_spine_tags.lua
并且导出为一个PSD文件。
Transclude of Export-as-psd.lua
如果你没有Aseprite,你也可以在ps中工作,并遵循上面的命名规范,并在最终使用:
Transclude of normalize_spine_tags.jsx
下面这个文件是罗莎(毛妹)的Aseprite源文件。您可以参考这个文件,来了解具体的逻辑和技术规格。
Transclude of Maogirl.aseprite
导入进Spine
当前Spine的版本是4.2.43。您需要处于和这个相同的版本(即以4.2开头,最好是4.2.43版本)。
就我所知,4.2.23是一个……呃,比较微妙的版本。在这个版本下,您应该可以正确地导出文件以供Unity使用,但并不能消费游戏内已导出的.json文件。
新建项目

打开Spine,点击新建项目。

点击这里的导入PSD

根据你的工程习惯,选中上面绘制和拆分角色的立绘这一步中所创建的PSD文件。

如果一切正常,此时你应该会看到这样的面板。

这里的皮肤是该角色可用的情绪(Angry/Fear/Happy……) 和 不同版本(如女仆/士兵/普通形态)。

这里是角色的插槽与骨骼。
创建骨骼
创建一个叫做Root的根骨骼。在游戏内,角色本身的Idle动画,会以随机的频率对Root施加上下位移,从而模拟呼吸。将该角色的其余所有插槽的物体都放到这个Root骨骼下面。
您可以继续对该角色的头发和各类部件进行绑定,包括制作其动画,这些都可以被游戏的动画系统消费,但本文档不会对Spine的骨骼绑定/头发怎么做进行教学,毕竟我的Spine也就是学了两个礼拜的三脚猫功夫,在此就不献丑了。
不过,有个参数倒是可以分享一下。头发的物理约束骨骼,我试下来下面两组参数比较好,可以试试看,但仅供参考。
根部:
15/25/15/25,整体更固定。
末部:
20/25/15/20,通常使用这个←←←
Transclude of MaoGirlSpineRef.zip
阴影
上面的Spine文件里解释了游戏中头发的阴影是如何制作的。简而言之就是绑定好后复制一份,然后设置为变暗,将两个颜色都设为阴影的颜色。
导出

参考这个打包设置,将其打包到 你的Mod名称/Spine 文件夹下。
在对话中使用
在这之后,你可以简单地使用譬如:
MyDaughter: 我说了一句话!来调用这个角色。