@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. 异常控制流(csapp)

    [前言]程序按照一定顺序执行称为控制转移.最简单的是平滑流,跳转.调用和返回等指令会造成平滑流的突变.系统也需要能够对系统状态的变化做出反应,这些系统状态不能被内部程序变量捕获但是,操作系统通过使控制 ...

  2. 后端程序员之路 59、go uiprogress

    gosuri/uiprogress: A go library to render progress bars in terminal applicationshttps://github.com/g ...

  3. NPOI 在指定单元格导入导出图片

    NPOI 在指定单元格导入导出图片 Intro 我维护了一个 NPOI 的扩展,主要用来导入导出 Excel 数据,最近有网友提出了导入 Excel 的时候解析图片的需求,于是就有了本文的探索 导入E ...

  4. CCF(地铁修建):向前星+dijikstra+求a到b所有路径中最长边中的最小值

    地铁修建 201703-4 这题就是最短路的一种变形,不是求两点之间的最短路,而是求所有路径中的最长边的最小值. 这里还是使用d数组,但是定义不同了,这里的d[i]就是表示从起点到i的路径中最长边中的 ...

  5. 《进击吧!Blazor!》系列入门教程 第一章 6.安全

    <进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门教程视频,此教程能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力. 视频地址:https://s ...

  6. 还在用crontab? 分布式定时任务了解一下

    前言 日常任务开放中,我们会有很多异步.批量.定时.延迟任务要处理,go-zero中有 go-queue,推荐使用 go-queue 去处理,go-queue 本身也是基于 go-zero 开发的,其 ...

  7. 解决.NET Core Ajax请求后台传送参数过大请求失败问题

    解决.NET Core Ajax请求后台传送参数过大请求失败问题 今天在项目上遇到一个坑, 在.Net Core中通过ajax向mvc的controller传递对象时,控制器(controller)的 ...

  8. FreeBSD 12.2 阿里云镜像使用说明

    目前直接从阿里云 12.1 升级 12.2 会导致错误.镜像非本人制作.FreeBSD 12.2 阿里云镜像使用说明镜像下载地址: http://t.cn/A6taB5jO修改内容:对 /usr/sr ...

  9. 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(Unified API篇)

    SDK 开发 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(理念与设计原则篇) 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(开发基础篇) 顶级开源项目 Sentry ...

  10. ListView解析

    ListView通过一个Adapter来完成数据和组件的绑定.以ListActivity为例,它集成自Activity,里面包含有一个ListAdapter和一个ListView.绑定的操作通过set ...