@m0d1 大佬的督促(?)下有了这篇复盘。不过因为可能很多地方讲得不全面+理解不够深入,故不打算把这篇当成是教程/指南,那就算是一个指北吧= =

(划重点:不是教程!不是教程!不是教程!

省流简介:机缘巧合之下看到了stevenjoezhang/live2d-widget的多交互live2d,有点心动但是模型太少不太合口味;又是一个机缘巧合之下看到了Eikanya/Live2d-model中有收集解包食物语的live2d模型,发现了本命菜,顿时动力++,感觉能结合live2d-widget提供的cdn/api接口来将心仪的模型导入进去,折腾两个晚上终于成功了呜呜呜呜呜。

效果见我的个人hexo博客:https://c10udlnk.top/

P.S. 本篇指北面向melody主题(Molunerfinn/hexo-theme-melody: A simple & beautiful & fast theme for Hexo.)。

本篇指北涉及的Github项目:

模型准备

使用前人整理的模型

指路:Eikanya/Live2d-model: Live2d model collection

这里收集了提取自各种手游的live2d模型,强烈安利!

食用方法在对应文件夹里,这里我用的是他的食物语包(食物语的美工我疯狂吹好吗!),文件夹内说明是由于没有配置文件需要在想用的模型文件夹内自行配置.model.json,具体在各项应该填什么都写在下面代码的注释里了。

{ // 默认配置文件,这里用我用的100034_baozaifan为例
"expression":[ // /模型/expression文件夹内的各文件
{
"file":"expression/chijing.exp.json",
"name":"chijing.exp.json"
},
{
"file":"expression/haixiu.exp.json",
"name":"haixiu.exp.json"
},
{
"file":"expression/kaixin.exp.json",
"name":"kaixin.exp.json"
},
{
"file":"expression/idle.exp.json",
"name":"idle.exp.json"
},
{
"file":"expression/nanguo.exp.json",
"name":"nanguo.exp.json"
},
{
"file":"expression/shengqi.exp.json",
"name":"shengqi.exp.json"
},
{
"file":"expression/wunai.exp.json",
"name":"wunai.exp.json"
}
],
"model":"model.moc", // /模型文件夹的model.moc文件
"motions":{ // /模型/action文件夹内的各文件
"":[
{
"file":"action/fumaozi.mtn"
},
{
"file":"action/idle.mtn"
},
{
"file":"action/sikao.mtn"
}
]
},
"textures":[ // /模型文件夹内的texture文件
"texture_00.png"
],
"physics":"moc/physics.json", // /模型/moc文件夹的physics文件
"version":"Sample 1.0.0"
}

自此对某个模型的配置完成。

自己动手提取

当然,如果没有在上面的仓库里找到你想用的live2d模型,可以选择自己动手提取,不过由于各种手游对live2d模型的文件规范不太一样,故可能需要稍作修改。

动手提取的方法也很简单,解压手游的apk包,然后在assets文件夹(apk包里一般用来放原生资源的地方)内搜索live2d,看到类似名字的文件夹就是放着资源的地方,这里还是拿食物语做例子。

apk包解压以后:

./assets中搜索live2d

可以看到这里的./live2dcharacter就是存放模型的地方,打开可以看到

这些就是我们的模型啦~

当然稍作修改的地方就靠自己了hhh,可以参考那个仓库里多几个文件夹的live2d的文件布局试试。

交互少的小白版live2d

接下来就分两条路走啦,分别是交互少的小白版live2d交互多的大白版(x)live2d

本part面向懒得折腾 / 少交互就够用的人群,如想使用博客效果中(https://c10udlnk.top/)这种live2d,直接忽略这里跳到下一个part就好。

按照melody主题提供的教程(额外依赖库支持 | hexo-theme-melody),在blog的根目录下运行npm install --save hexo-helper-live2d来安装live2d插件。

然后按照EYHN/hexo-helper-live2d: Add the Sseexxyyy live2d to your hexo!这里的a方法添加自定义模型。

具体如下:

先在博客根目录下创建一个/live2d_models的文件夹,

然后将刚刚下载的模型复制到该文件夹下:

然后更改/_config.yml,在末尾添加:

# 官方的默认例子,具体各项配置看仓库的readme
live2d:
enable: true
scriptFrom: local
pluginRootPath: live2dw/
pluginJsPath: lib/
pluginModelPath: assets/
tagMode: false
log: false
model:
use: 100034_baozaifan #要使用的模型名称(文件夹名)
display:
position: right
width: 150
height: 300
mobile:
show: true
react:
opacity: 0.7

然后更新博客就可以看到萌萌哒的live2d啦~

(温馨提示:因为缓存刷新较慢,hexo d部署上去以后可能要好久才能看到效果,所以可以先用hexo s代替hexo d,调整完效果以后最后再用hexo d部署就好。)

如果看不到模型的话一定是因为没配置好index文件(.model.json),手动指路$1.1

交互多的大白版(x)live2d

如果你之前运行过npm install --save hexo-helper-live2d安装了hexo-helper-live2d插件的话,建议使用npm uninstall hexo-helper-live2d将其卸载,当然如果你想拥有两只不同种类live2d,那当我没说。

本部分有参考issue[第三方支持]加入一个更多功能的live2d · Issue #214,但是因为时间久远/版本问题对有些细节稍作修改。

安装live2d-widget

  1. 下载stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platform中的各文件,并解压到主题根目录source文件夹下(以melody主题为例,解压到/node_modules/hexo-theme-melody/source目录下;有些主题的根目录在/themes/主题名/source)。

  2. 修改/node_modules/hexo-theme-melody/source/live2d-widget/autoload.js,将const live2d_path = "https://cdn.jsdelivr.net/gh/stevenjoezhang/live2d-widget@latest/";改为const live2d_path = "/live2d-widget/";

  3. /node_modules/hexo-theme-melody/layout/includes/additional-js.pug文件末尾添加script(src=url_for('/live2d-widget/autoload.js'))

  4. /_config.melody.yml末尾添加:

live2d:
enable: true

至此便能看到项目本身自带的模型了:

常用配置说明

模型的大小、位置、格式和文本内容等配置,需要自行设置/node_modules/hexo-theme-melody/source/live2d-widget中的waifu-tips.jswaifu-tips.jsonwaifu.css,这里提一些各文件里常用的配置。

(这里如果用hexo s调整模型的话将会很方便,直接刷新就能看到最新效果)

someFixedConfigs/live2d_cfgWithHexo放了一下自己的配置,主要针对melody主题改了一些selector,伸手党替换文件后可直接食用。

waifu-tips.js

这里是模型加载启动/点击工具栏相应按钮时的行为和文本内容定义,具体对应可以对照参考原模型的行为,比如

这个部分是用来显示用户点回本页面时显示的文本,其余同理。

waifu-tips.json

这里是除了上面js里定义的文本以外的其余文本内容,同样可以对照参考原模型猜测来进行修改。

值得注意的是,这个文件里分了几大块,架构大概是:

{
"mouseover": [{ // 鼠标悬停在某个特定元素时显示的文本
"selector": "...",
"text": "..."
}],
"click": [{ // 鼠标点击某个特定元素时显示的文本
"selector": "...",
"text": "..."
}],
"seasons": [{ // 在特定日期显示的文本
"date": "01/01",
"text": "..."
}]
}

text这里很显然是填显示的文本。

date是指定的特定日期。

至于selector就类似于CSS里的CSS选择器,是用来指定元素类型的。

这里可以直接用默认的,当然更建议自己更改(因为不同主题对不同元素的tag/class/id好多都不一样,如果没有自定义的话用起来很多都没办法触发)。

waifu.css

CSS可以堪称是改大小/位置/格式的重头戏,想要让模型按照自己的想法显示在页面上,就得在这一块下功夫。

(当然,CSS有些设置和布局挺玄学的,发现加了某语句没作用的情况建议自行搜索or多调试)。

这边点几个大概率需要配置的常用点,其他的可以自己查css的各种语法来调整,或者在仓库的issue里查有没有相同需求的(甚至可以自己提issue。

#waifu #live2d这里强调是画布大小,上面没标清楚懒得改了hhh)

运用CDN添加自定义模型

当然,想要添加之前下载的自定义模型,走到这一步还不够,还得往下多走一步。

感谢@Fxizenta 大佬的提醒,这里参考使用免费CDN服务加速Github博客_Shy_tom的博客-CSDN博客,用github的免费cdn服务来实现我们的自定义需求(顺便加速)。

本来想着把api部署到博客本地上然后调用的,后来才想起来hexo博客是静态博客(不能发response包= =),感谢大佬提前部署到服务器上但最后没用上的api。

先把提供的api接口仓库(fghrsh/live2d_api: Live2D 看板娘插件 (https://www.fghrsh.net/post/123.html) 上使用的后端 API)fork一下:

然后在本地把这个仓库clone下来,方便通过本地更改

依次点击,将git地址复制下来,然后在powershell运行:

git clone 刚刚复制下来的内容

等clone完成以后打开文件夹,需要关注的是两个地方是live2d_api/model_list.jsonlive2d_api/model文件夹。

live2d_api/model_list.json里放的是需要展示的模型列表和刚换出来时的问候语:

{
"models": [
"model内的各模型文件夹名",
...
],
"messages": [
"对应的问候语",
...
]
}

比如我这边分别在末尾新增煲仔饭相关:

live2d_api/model文件夹则存放着模型,在这里放入我们的自定义模型:

这里就要把模型文件夹内之前的.model.json文件名改成index.json,并且增加一些内容(这里依旧是以煲仔饭模型为例,需要更改的地方在注释标出):

{
"expression":[
{
"file":"expression/chijing.exp.json",
"name":"chijing.exp.json"
},
{
"file":"expression/haixiu.exp.json",
"name":"haixiu.exp.json"
},
{
"file":"expression/kaixin.exp.json",
"name":"kaixin.exp.json"
},
{
"file":"expression/idle.exp.json",
"name":"idle.exp.json"
},
{
"file":"expression/nanguo.exp.json",
"name":"nanguo.exp.json"
},
{
"file":"expression/shengqi.exp.json",
"name":"shengqi.exp.json"
},
{
"file":"expression/wunai.exp.json",
"name":"wunai.exp.json"
}
],
"layout":{ // 新增 调整模型位置及长宽
"center_x": 0,
"center_y": -0.16,
"width": 1.8,
"height": 2.5
},
"hit_areas_custom":{ // 新增 模型的点击感应位置
"head_x":[-0.4, 0.9], // 头部判定
"head_y":[0.4, 0.6],
"body_x":[-0.4, 0.5], // 身体判定
"body_y":[0.4, -0.9]
},
"model":"model.moc",
"motions":{ // 有修改,新增触发对应表情时的行为
"idle":[ // 空闲时动作
{"file":"action/idle.mtn"}
],
"flick_head":[ // 点击头部时动作
{"file":"action/fumaozi.mtn"}
],
"tap_body":[ // 点击身体时动作
{"file":"action/sikao.mtn"}
]
},
"textures":[
"texture_00.png"
],
"physics":"moc/physics.json",
"version":"Sample 1.0.0"
}

更改完以后将本地内容推上github上,在powershell的该目录下运行:

git add . ; git commit -m "add new model" ; git push

然后在github仓库这里release一下:

然后把/node_modules/hexo-theme-melody/source/live2d-widget/autoload.js中的:

改成:

cdnPath: "https://cdn.jsdelivr.net/gh/用户名/live2d_api@版本号/"

比如我这边就是:

(注意这里如果不行的话把用户名的大写都转成小写试试,可能是对用户名的规范使用问题)。

然后更新博客就能看到想见的人啦~

我的自定义多交互live2d折腾经历的更多相关文章

  1. 使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历

    原文:使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 常常遇到需要向SQL Server插入批量数据,然后在存储过程中对这些数据进行进一步处理的情况.存储过 ...

  2. 使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历

    使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历   原文:使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 常常遇 ...

  3. HTC Vive 体验的折腾经历

    HTC Vive 是个什么东西, 想必我就不用介绍了, 不知道自己百度吧 HTC Vive发布已经有一段时间了, 一直很纠结买还是不买, 这玩意太贵(官网6888),买了还不能直接用, 还要配太高性能 ...

  4. 如何为Surface Dial设备开发自定义交互功能

    随着Surface Studio的发布,微软发布了与之相配套的外设硬件Surface Dial,用户可以将Surface Dail吸附在Surface Studio的屏幕上面,用旋转和点击的实体操作来 ...

  5. 兼容IE8的flash上传框架"uploadify"自定义上传按钮样式的办法

    (uploadify版本:3.2.1 ) 因为公司业务的原因,所做的项目需要兼容IE8,因此做的上传插件无奈选择的是基于flash的uploadify. 由于是基于flash的,所以使用过程中,难以给 ...

  6. Atom编辑器折腾记

    http://blog.csdn.net/bomess/article/category/3202419/2 Atom编辑器折腾记_(1)介绍下载安装 Atom编辑器折腾记_(2)基础了解使用 Ato ...

  7. 折腾开源WRT的AC无线路由之路-1

    Tags: tomato, dd-wrt, Netgear, NightHawk, R7000, RT-AC68U, RT-AC66U, N66U, N56U, WRT1900AC, Archer C ...

  8. 创建自定义view(翻译 androidtraining)

    创建自定义view 一个设计良好的的自定义view应该是一个设计良好的class,它包含了很多实用的功能,让人们更加容易使用接口.它充分利用GPU与内存的性能等等. 另外作为一个设计良好的类,一个自定 ...

  9. 页面定制CSS代码初探(二):自定义h2标题样式 添加阴影 添加底色 等

    故事的开始 先说一下<h2></h2>原先默认是空白的,很难看 然后今天无意中看到一个博友的标题很好看啊,一直就想要这种效果有没有? 好的东西自然要拿过来啦 通过审查元素,果然 ...

随机推荐

  1. Pyqt5——变色的表格

    需求:鼠标左键点击表格后,对应的单元格背景颜色发生变化. 实现:(1)使用Qt的model-view模式生成表格视图. (2)重写表格的点击事件. (3)设置表格的背景颜色. 正常情况下,当用户选中单 ...

  2. 推荐!!! Markdown图标索引网站

    作者:三十三重天 博客: http://www.zhouhuibo.club 我们在观察别人的文章时候时,总能看到很多有趣的图标,像是这样

  3. FreeBSD jail 折腾记(二)

    FreeBSD jail 折腾记(二) 创建jail目录 创建4个 分别是模板 骨架 数据 项目 创建模板目录 mkdir -p /jail/j1 # 然后放入基本目录,上篇说过不再写 创建骨架目录 ...

  4. Navicat 121版本激活工具

    以下是工具的链接: https://github.com/DoubleLabyrinth/navicat-keygen/blob/windows/README_FOR_WINDOWS.zh-CN.md ...

  5. Pytorch编程记录

    搭建网络的方式: 1.用sequential方式搭建,只能适用于线性网络 2.用forward和init方式搭建

  6. IntelliJ IDEA安装lombok

    1. 搜索Plugins 点击下方的Browse repositories.. 2.点击安装,重新启动

  7. python flake8 代码扫描

    一.介绍 Flake8 是由Python官方发布的一款辅助检测Python代码是否规范的工具,flake8是下面三个工具的封装: PyFlakes Pep8 NedBatchelder's McCab ...

  8. 【图像处理】OpenCV+Python图像处理入门教程(四)几何变换

    这篇随笔介绍使用OpenCV进行图像处理的第四章 几何变换. 4  几何变换 图像的几何变换是指将一幅图像映射到另一幅图像内.有缩放.翻转.仿射变换.透视.重映射等操作. 4.1  缩放 使用cv2. ...

  9. 10、MyBatis教程之一对多处理

    11.一对多处理 一对多的理解: 一个老师拥有多个学生 如果对于老师这边,就是一个一对多的现象,即从一个老师下面拥有一群学生(集合)! 1.实体类编写 @Data public class Stude ...

  10. 92反转链表II

    # Definition for singly-linked list.# 这道题还是有点复杂的,但是是有套路的,套用反转链表的想法class ListNode: def __init__(self, ...