自制了一个支持从 GitHub 仓库下载素材的 Spine 查看器工具 (支持 macOS/Windows)

大家好! 我不懂中文,所以这些内容是通过人工智能(Gemini)翻译而成的,如有不顺,请多包涵。我想和大家分享一下我开发的一个小工具:Motiv2D

我开发这个工具是因为我在‘贤者模式’(Post-nut clarity)下突然意识到,目前市面上没有一个支持通过键盘快捷键快速切换动画和角色的查看器。在其他工具里手动隐藏图层简直太费时间了。所以我做了一个支持 Spine 3.8、4.0 和 4.1 的通用查看器,同时适配 macOS 和 Windows 系统。

主要功能:

  • GitHub 集成: 您可以通过简单的代码,直接从 GitHub 仓库导入并下载 Spine 素材。

  • 图层控制: 拥有“图层吸管”功能和分组开关,可以轻松隐藏或显示动画的特定部分。

  • 轨道混合 (Track Mixing): 支持同时播放多个动画(例如将表情动画与身体姿势混合)。

这个项目完全免费且开源。目前软件还在不断完善中,非常欢迎大家提供反馈和建议!

开源地址 (GitHub): GitHub - o0Nomar0o/Motiv2D: Spine2d and Live2d Viewer

Showcase Gif (I dont know how to upload vid)

Quick Start Codes (Copy & Paste into Remotes):
BrownDust2:

M2D:eyJuIjoiQnJvd24gRHVzdCAyIiwicCI6Im8wTm9tYXIwby9Ccm93bi1EdXN0LTItQXNzZXQvbWFzdGVyIiwibSI6MCwiZiI6W10sInUiOiJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbzBOb21hcjBvL0Jyb3duLUR1c3QtMi1Bc3NldC9tYXN0ZXIvQ2hhckluZm8uanNvbiJ9

Azur Lane (Spine only)

M2D:eyJuIjoiQXp1ckxhbmUiLCJwIjoibzBOb21hcjBvL1NwaW5lQ29sbGVjdGlvbnMvbWFpbiIsIm0iOjEsImYiOlsiY29tLmhrbWFuanV1LmF6dXJsYW5lLmdwX2xpdmUyZF9zcGluZV9vbmx5XzIwMjUxMjAxIl19

DaiblosCore/CrossCore:

M2D:eyJuIjoiRGFpYmxvc0NvcmUiLCJwIjoibzBOb21hcjBvL1NwaW5lQ29sbGVjdGlvbnMvZGFpYmxvcy1jb21taXRzIiwibSI6MSwiZiI6WyJQYXlsb2FkLURhaWJsb3NDb3JlIiwiRGFpYmxvc0ZlYlBhcnQiXX0
4 个赞

这个轨道混合模式很不错,是可以保存在本地变成一个类似整体的文件吗,然后还有就是希望可以多做适配,比如2.1~现在的版本

1 个赞

非常好的想法 :+1:

1 个赞

有些游戏不单只是多轨道动作那么简单
可能还有事件->触发动作


这是一段代码我自己用于星神少女的眨眼动作触发播放
而且不是傻眨而是10%的概率
或许加上这个这个viewer真的就是通用viewer了

如果再加上一个solt附加图片的功能你就能对一些spine和背景分离的cg完美绑定背景


这是一段代码用于绑定女神ALL-IN和星神少女的背景图片到指定bone或者solt下的部分代码

当然可以监听输入事件比如鼠标点击 键盘点击等等去做一些自定义脚本事件
我曾经做过类似的viewer但是只能用于4.1版本的spine因为spineruntime的API不同版本差异太大了(

1 个赞

非常感谢您的反馈!也非常感谢您提供的建议和代码片段。虽然我使用的是 TypeScript 开发,但您提供的关于事件触发和 Slot 绑定的逻辑非常有参考价值。我会深入研究这些功能,并尽力把它们加入到开发计划中,让这个查看器更加通用。再次感谢您的支持!

1 个赞

spineruntime的API命名在不同语言的代码文件中是一样的应该
我自己有个使用4.3beta版本TS语言的webplayer


API的命名和C#基本是一样的
官方虽然几乎没有ts版本的API示例项目
但是你可以在spine的论坛中询问spine的开发者如何使用

顺带一提你可以在SkeletonRenderer.ts添加一个二维坐标旋转功能



这样支持旋转
在SceneRenderer.ts中修改resize的方法支持缩放(这里我不清楚ts和其他语言为什么中心点不一样在C#中spine的中心点是使用spine编辑器中的中心点而ts中中心点是不固定的他会将画面自动缩放移动让所有可视solt显示)

2 个赞

(我估计贴主也是用Gemini翻译中文成英文来阅读回贴的)
在使用AI翻译时希望用段落对段落,分项对分项地对照式翻译.
看到路线图有打算"AssetStudioMod CLI 桥接/AssetStudioMod CLI Bridge" 不妨再参考 GitHub - YSFC/StudioPluginVer: Modded AssetStudio with new features 这个集成了部份解密功能
还有希望它能抓取https://assets.l2d.su/live2d/azurlane/zhangwu_2/zhangwu_2.model3.json 这种路径

1 个赞

感谢作者的工具,确实挺好用的。就是想提一点小小建议,PMA能否给一个默认设置全局打开或者关闭,否则每次切换模型都得自己打开或者关闭一次PMA还是有点麻烦。

1 个赞

感谢您的反馈和建议!想确认一下您的使用情况:您是指切换回同一个模型时,PMA设置没有被记住;还是指导入新的模型时,需要每次手动调整PMA比较麻烦?

目前PMA是按角色单独保存设置的,软件会先从对应角色的atlas文件中读取PMA信息并自动应用,这样不同模型会保持各自最合适的显示状态。同时也可以使用快捷键快速切换PMA,减少手动开关的操作。后续我也会考虑增加全局默认开关作为可选功能,以提升使用体验。

就拿AzurLane举例,每次导入模型都是默认关闭PMA的,需要手动打开。而且还有个问题就是Azurlane中有些角色的spine动画被拆分成几个骨骼动画,这时候查看器只会加载其中一个动画不能完整加载

1 个赞

感谢您的详细说明和反馈!

关于PMA的问题,确实像Azur Lane这类模型的atlas默认是关闭PMA的,所以导入时会按atlas信息自动设置,导致需要手动开启。后续我会考虑增加一个全局PMA默认开关,方便在这类模型中统一使用。

另外关于动画被拆分的问题,目前查看器的渲染逻辑是一次只加载一组skel和atlas,而Azur Lane的部分角色是由多个skel和atlas组成不同部件,因此只会显示其中一部分。后续我也会研究将多个资源进行分组并叠加渲染的实现方案,不过这部分涉及到较多设计和实现工作,可能需要一些时间。

非常感谢您的宝贵建议和反馈!

1.最好换一下图标,我英文不好,所以翻了半天才在二级页面中看见导入文件夹的logo图标,导入的主图标却是一个人像图标,这不太符合逻辑,主文件的图标换成文件夹:open_file_folder:比较合适

2.播放列表存在多个动画只能从后往前删除播放列表,不能任意移除

最后软件很强,对我来说很合适,非常感谢,我为你的github项目点了星星:star:

1 个赞