# 前言

  • 前阵子刚好以前玩过的某款老牌 2d 手游正准备过十周年庆,回坑之后发现新出的看板娘做的都不错,所以决定把她们全部都捞过来博客里给我打工卖萌

  • 由于每个游戏的游戏引擎都可能不一样,碰巧这款游戏是用 Unity 制作的,而且有现成的解包工具,所以这篇文章仅供参考,非 Unity 引擎请自行搜索解包工具

  • 顺便点名批评一下某二游公司的某伟某皓某宇某策划某天使,十周年刚回坑就是让我这个老萌新吃满一百连大保底,真忘记我当年是怎么弃坑的了是吧

image

# 关于 Live2d

  • 据我局限的认知一般游戏里的看板引擎主要分为两种,Live2d 和 Spine

  • Live2d 比 Spine 有更强的互动性,比如触摸反馈等,如果你发现某个模型的目光会跟着玩家的鼠标进行移动,那么这个模型大概率就是 Live2d 制作的

  • 关于 Live2d 的配置说明可以参考一下这篇文章

image

# 导出游戏资源

  • 在 Mumu 模拟器上安装好游戏,等待所有游戏资源下载完毕(包括游戏内要另外下载的资源),在 Android/data 目录下找到游戏文件夹,然后复制到 Mumu 共享目录中提取出来

image

# 下载 AssetStudio

  • 这个项目原名叫 AssetStudio,Github 上也有不少少类似的项目,比如 UnityStudio,GenshinStudio,CNStudio 等

  • 由于这个项目自身比较特殊的原因,或者涉及到 Unity 或者游戏公司的利益问题?,如果某一天链接失效了,就在 github 上重新找一下类似的项目吧

  • 下载地址:https://github.com/RazTools/Studio/releases

  • 从 Release 中下载最新版本的 AssetStudio 后,解压打开里面的 AssetStudio.GUI.exe,启动这个程序需要安装对应的.net 运行时,初次启动如果没有安装会自动提示下载安装

# 提取模型文件

  • 运行 AssetStudio.GUI.exe 后,在 Options --> Specify Game 中选一下对应的游戏,比如某原选择 GI、某铁选择 SR、某零选择 ZZZ,由于我要解包的游戏不选也行,所以我这里选了默认的 Normal

  • 选择 file --> Load folder ,选择刚才从 Mumu 中复制出来的游戏文件夹

  • 注意 AssetStudio 对内存的需求比较大,解包的内容越多需要的内存就越大,如果内存不够的话就将 *.unity3d, *.blk 等文件单独拎出来分批读取吧

  • 加载以后搜索一下 moc,可以发现文件都放在这个路径下 assets\assetbundles\menusv2\partner\allpartnerlive2dsv4

image

  • 选择 Options --> Export options ,将 Group exported assets by 设置为 container path ,避免导出时按照素材类型分组导致同名文件被覆盖的问题

image

  • 选择 Export --> All assets ,将所有素材导出,等待导出完毕后,按照刚才的路径找到我们需要的素材

image

  • 这里每个 live2d 模型都放在单独的文件夹里,可以按照文件夹里的 texture_00.png 来判断是否自己需要的模型,这里以 1833 这个红叶香水的模型为例

image

  • 将下面的文件复制一份到一个单独的文件夹中,以后直接从这个文件夹里加载模型就行

image

# 提取 moc 文件

  • 现在还缺少一个关键的 .moc3 文件,这个文件需要用另一种方法提取出来

  • 回到 AssetStudio 找到目标.moc 文件,或者对应的贴图,这里没有找到 moc 文件所以搜索了 texture_00

  • 右键目标文件 --> Show original file ,记录弹出路径中选中的文件名,比如这里对应的是 assetbundle__103_8936e6a2275cdac7a85fa5b4d24ab640.unity3d

image

image

  • 将这个文件复制出来单独放在一个文件夹中,比如我放在名字叫 103 的文件夹里

  • 从 github 上下载另一个项目 UnityLive2DExtractor

  • 下载地址:https://github.com/Perfare/UnityLive2DExtractor/releases

  • 下载压缩包解压后,将刚才的文件夹拖放到解压目录的 UnityLive2DExtractor.exe 上,顺利的话会在拖动文件夹对应的目录中生成一个 Live2DOutput 文件夹

  • 如果无法运行可以尝试安装一下对应版本的运行时,.config 文件中显示的运行时是.NETFramework,Version=v4.7.2

image

image

  • 在生成的 Live2DOutput 文件夹中找到我们需要的 moc31833.physics3.jsontextures ,将这些文件也复制到前面创建的文件夹中

image

  • 最终所有需要的模型文件如下

image

image

image

# 提取音频文件

  • 音频文件一般打包在 pck 文件里,直接在 Mumu 导出的文件里搜 *.pck ,在里面找到这个带 Partner 命名的大概率就是看板娘的语言包了,这里把它单独复制到一个文件夹里

image

  • 这里图方便使用一个 UP 制作的音频解包工具 WwiseExtractor,下载链接需要到的 UP 的专栏链接里面找

  • 链接:https://www.bilibili.com/read/cv5330096

  • 打开压缩包里面的 WwiseExtractorConsole.exe ,第一次选择刚才的 PCK 文件夹,第二次选择输出目录,注意两次不要选同一个目录,第一个目录也不能包含第二个目录

  • 等程序跑完后可以得到一堆 ogg 文件,用格式工厂把这些音频文件全部转成 mp3 格式,再从 mp3 里面去找我们具体需要的文件

  • 或许大概实装越早的看板命名的下标就越靠前???

image

image

  • 将看板娘所需要的音频文件复制到模型文件夹的 sound 目录下,这下需要的文件就齐了

image

# 制作 live2d 模型

  • 制作模型需要用到 Live2DViewerEx ,这个软件可以对 live2d 模型动作进行编辑,平时也可以将模型加载到桌面当作看板娘

  • 这个软件是要在 Steam 上购买的,大概二十多块钱左右吧,不想购买的话自己找破解版吧

  • 启动 Live2DViewerEx ,启动后选 EX工作室 --> Live2D编辑器 --> 选择Moc或Json文件

image

image

  • 如果是已经做好的模型直接选 model.json 之类的 json 文件就行,本文演示一下自定义,所以加载 .moc 文件

  • 打开后会提示创建 json 配置文件,把之前整理出来的 Moc、物理 json、贴图都给选上

  • 这里先创建一个中文语音版的配置文件 1833_cn.model3.json

image

  • 添加待机动画 Idle

image

image

image

  • 添加出场动画 Start

image

image

  • 接着添加触摸动画,首先找到触摸的区域,然后记录下来这个区域的名字

image

  • 接着返回编辑配置文件,添加点击区域

image

  • 点击区域绑定相应的动作和语音

image

image

image

  • 到目前为止所有的配置都会保存在我们创建的 1833_cn.model3.json 文件中,下次继续编辑的时候只需要加载这个 Json 文件就行

  • 同理我们可以将这份配置文件复制一份改名为 1833_jp.model3.json ,然后加载这份文件将所有语音修改成日语

# 将模型加载到桌面中

  • 重新启动 Live2DViewerEX ,这次启动选项选择 启动 Live2DViewerEX

image

image

  • 拔掉耳机,将音量调到最大,测试一下效果

image

# 部分模型的兼容性问题

  • 有一部分模型在 Live2DViewerEX 加载后,无论怎么绑定 motions 都始终无法触发相应的动作效果,比如待机动画等都是无法执行的,但是默认开启的视线追踪是正常的,像这样

image

  • 因此推测逆向出来的 moc 文件应该是没问题的,问题可能出现在 motions 动作文件上。在一番折腾后发现,两个不同版本之间的模型,它们的参数命名规范是不一样的,也就是说某游很可能使用了不同的 Cubism SDK 来制作不同的模型

image

image

  • http://live2d.pavostudio.com/doc/zh-cn/exstudio/live2d-editor/#_18

  • 抱着试一下的心态将 motions 文件里的这类参数命名方式全给替换掉,但是这类型的参数实在太多了,无奈还是手搓了一个现成的替换工具

  • https://github.com/GardenHamster/MotionModifys

  • 将替换后的 motions3.json 文件重新绑定到模型中,发现待机动作之类的都可以正常触发了,而且幸运的是还没有出现其他奇奇怪怪的问题

image

  • 最后对比一下游戏的模型绑定台词和语音,却发现游戏里一些动作是也是加载不出来的,或许官方也卡在类似的版本兼容问题上了吧......

# 在网页上加载 live2d

  • 在 web 上加载 live2d 模型需要用到官方的 SDK Cubism SDK for Web

  • 由于 live2d 模型版本有区分 Cubism2/3/4/5,各个版本的模型加载方式或许各不相同,你可以使用 Github 上一个大佬的兼容项目 pixi-live2d-display

  • Github 上的 Live2dWeb 相关项目对点击事件等加载也各不相同,所以如果想要做出来最符合自己预期的效果,还是建议自己手搓代码吧

  • 你也可以尝试使用我的一个魔改项目 live2d-web,使用方法清查看 Readme

  • 理论上 Live2DViewerEX 创意工坊上的 Lpk 文件如果能解包成功也是能加载到 web 上吧

# 参考链接

# 模型提取

https://www.bilibili.com/read/cv5773529
https://www.maxstars.xyz/2023/09/24/bi-lan-hang-xian-chai-bao-ji-lu
https://www.bilibili.com/read/cv27390576/
https://eikanya.github.io/post/live2d 配置

# 音频提取

https://www.bilibili.com/read/cv5330096
https://www.bilibili.com/read/cv3027629
https://www.bilibili.com/read/cv5939682

# 模型兼容

https://github.com/guansss/pixi-live2d-display/discussions/143
http://live2d.pavostudio.com/doc/zh-cn/live2d/model-config
http://live2d.pavostudio.com/doc/zh-cn/exstudio/live2d-editor/#_18
https://intmain0.com/187

# web 加载

https://docs.live2d.com/zh-CHS/cubism-sdk-manual/cubism-sdk-for-web
https://github.com/guansss/pixi-live2d-display
https://github.com/GardenHamster/live2d-web
https://github.com/stevenjoezhang/live2d-widget
https://github.com/galnetwen/Live2D

更新于 阅读次数