@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. 剑指 Offer 49. 丑数 + 小根堆 + 动态规划

    剑指 Offer 49. 丑数 Offer_49 题目详情 解法一:小根堆+哈希表/HashSet 根据丑数的定义,如果a是丑数,那么a2, a3以及a*5都是丑数 可以使用小根堆存储按照从小到大排序 ...

  2. canal mysql select权限粒度

    今天产品问了一个问题,问懵了 产品:canal在开通mysql权限时需要哪些权限 我:SELECT, REPLICATION SLAVE, REPLICATION CLIENT 产品:那SELECT权 ...

  3. WPF 基础 - 资源

    为了避免丢失和损坏,编译器允许我们把外部文件编译进程序主体.成为程序主体不可分割的一部分,这就是传统意义上的程序资源,即二进制资源: WPF 的四个等级资源: 数据库里的数据 (仓库) 资源文件 (行 ...

  4. Java基础:常用基础dos命令

    打开cmd的方式1.开始+系统+命令提示符2.win键+R 输入cmd 打开控制台3.在任意的文件夹下,按住shift键+鼠标右键点击,在此处打开命令提示行4.在资源管理器的地址栏前面加上cmd路径 ...

  5. 用实战玩转pandas数据分析(一)——用户消费行为分析(python)

      CD商品订单数据的分析总结.根据订单数据(用户的消费记录),从时间维度和用户维度,分析该网站用户的消费行为.通过此案例,总结订单数据的一些共性,能通过用户的消费记录挖掘出对业务有用的信息.对其他产 ...

  6. HDU_3949 XOR 【线性基】

    一.题目 XOR 二.分析 给定$N$个数,问它的任意子集异或产生的数进行排列,求第K小的数. 构造出线性基$B$后,如果$|B| < N$,那么代表N个数中有一个数是可以由线性基中的其他数异或 ...

  7. python ORM之sqlalchemy

    前沿对象关系映射ORM是在实际应用编程中常用到的技术,它在对象和关系之间建立了一条桥梁,前台的对象型数据和数据库中的关系型的数据通过这个桥梁来相互转化.简单来说就是开发人员在使用ORM模型编程时,不需 ...

  8. 使用shell脚本替换Hadoop配置文件的值

    因为懒汉式的实现是线程安全的,所以会降低整个访问速度,而且每次访问都要判断一次.有没有更好的方式实现呢?可以使用"双重检查枷锁"的方式来实现. 所谓"双重检查加锁&quo ...

  9. 吃透 MQ

    本文主要讲解 MQ 的通用知识,让大家先弄明白:如果让你来设计一个 MQ,该如何下手?需要考虑哪些问题?又有哪些技术挑战? 有了这个基础后,我相信后面几篇文章再讲 Kafka 和 RocketMQ 这 ...

  10. windows如何上传ios app到appstore

    我们在hbuilderx这些开发工具打包好ios app后,需要将这个app提交appstore才能让用户下载安装. 上传IOS APP主要是通过苹果开发者中心来上传,然后借助香蕉云编上传工具来上传就 ...