花亦山心之月(The Moonlit Oath) 解析自定义Spine Spine/Live2D UnityCN
文件乱七八糟的,同时部分spine是自定义格式的,把动作和基础骨骼分离开了,而其他部分则是可以正常播放的。
资源路径
APK
- ab文件
- spineanimations目录下都是.spineani文件,也就是自定义spine中被分离开的动作。
Update
结构与APK完全一致。
- ab文件
- assets目录下找到spineanimations
合并一下两个spineanimations目录,同名文件保留来自Update的。
├─ APK
├─ Update
└─ spineanimations
导出
Spine
导入Raz版AS,选择UnityCN key
搜索
assets/rescollection/prefabs/spine/spinedynamicassets/art/spine
不分组导出(把skel atlas png都放在一个目录,记为RES),因为如果按照容器路径导出,会有部分的atlas和png放一起,但是skel单独放在另一个目录下。
然后再把之前的spineanimations的所有.spineani文件也放到这个混合目录RES下。这样skel atlas png spineani 都在同一个目录RES之下。
DelFileSuf(.txt .bytes .asset .prefab).bat
批量去除文件后缀 asset prefab txt bytes
Live2d
Unity Live2D Cubism 3 Extractor for UnityCN
就10个,嫌麻烦就算了吧
手动处理UnityCN还原为明文bundle,然后导入MOD版AS一键导出。
解析Spine自定义格式
TheMoonlitOath/MergeSkelAndAni.py
参考IDA反编译代码、 SpineSkeletonDataConverter以及LLM炼丹。
具体的解析细节太多了,大致就是:主体部分的hash字段是自定义的,没法直接用这个skel,只能转为json,但是转为json后animations是空的,因为animations被单独放在了spineani文件里面,不展开介绍了。自定义改动的部分太多了,14种TimeLine几乎都改了,还有一些数据读取方式包括但不限于自定义读取方式以及大端读取。
目前解析的模型都可以正常运作,只有一个模型解析有略微的问题Senior_Yunwuji_Rw.json
---> System.ArgumentException: Color hexidecimal length must be 8, recieved: 5FAFFFFFF (Parameter 'hexString')
[E]2026-02-14 00:40:04 - Failed to load: D:\Tools\UsefulTools\MuMu\Shared\Download\花亦山\output\TMP\Senior\Senior_Yunwuji_Rw\Senior_Yunwuji_Rw.json, Failed to load spine with version '3.8'
手动改为5FAFFFFF,应该是多了一个F
分类
把同一个spine的skel/json png atlas 放在同名目录下。
获取UnityCN key
没什么特别之处,简述一下。
SetABEncryption ← SetAssetBundleDecryptKey ← SetAssetBundleKey
dump.cs
Unity内部的虚拟路径。
点击mono后需要导入DummyDLL还原数据
string EncryptKey = "INHJnhdypqk547xd"
string → hex
494e484a6e68647970716b3534377864
文件太多了,仅提供Live2D以及部分Spine
GamesArchive/TheMoonlitOath (HuaYiShanXinZhiYue)
哦对了,提前祝大伙新年快乐吧。













