近日在装修站点时发现了好玩的 “看板娘 “,尽管我不混迹二次元世界,但看板娘的动效实在让我眼馋,遂决定将它带回家。

# 传统插件:hexo-helper-live2d

使用 npm 安装:

npm install hexo-helper-live2d

安装后博客会使用库中自带的看板娘模型,并且只有最简单的效果

若想使用更高级的动效、换装等功能,则需要替换为自定义的模型

但是 hexo-helper-live2d 几年前便停止维护,使用自定义的看板娘时只能使用 .moc 版本的模型,不兼容 .moc3 版本,因此笔者尝试后发现页面无法加载,遂放弃。

# 时代新秀:oh-my-live2d

该插件于 2024 年发布,并且一直在积极维护,支持所有版本的 live2d 模型,并且更简单、更方便自定义。

官网上有插件介绍和 hexo 配置的简单教程,但是官方代码有点问题,无法正确加载资源

# 安装

npm install hexo-oh-my-live2d

# 配置

在博客根目录的 config.yml 末尾引入以下代码:

OhMyLive2d:
  enable: true
  CDN: https://unpkg.com/oh-my-live2d
  option:
    dockedPosition: 'left' # 模型停靠位置 默认值: 'right' 可选值: 'left' | 'right'
    # menus: |
    #   (currentModel) =>{
    #     console.log(currentModel);
    #   }
    # menus:
    #   items: |
    #     (defaultItems)=>{
    #      return [
    #        ...defaultItems,
    #        {
    #          id: 'github',
    #          icon: 'github-fill',
    #          title: '我的github',
    #          onClick: ()=>window.open('https://github.com/hacxy')
    #        }
    #      ]
    #     }
    #   items:
    #     - id: 'github'
    #       icon: 'github-fill'
    #       title: ' 我的 github'
    #       onClick: ()=>window.open('https://github.com/hacxy')
    mobileDisplay: true # 是否在移动端显示
    models:
      - path: https://unpkg.com/live2d-widget-model-shizuku@1.0.5/assets/shizuku.model.json
        mobilePosition: [0, 23] # 移动端时模型在舞台中的位置。 默认值: [0,0] [横坐标,纵坐标]
        mobileScale: 0.1 # 移动端时模型的缩放比例 默认值: 0.1
        mobileStageStyle: # 移动端时舞台的样式
          width: 180
          height: 250
        motionPreloadStrategy: IDLE # 动作预加载策略 默认值: IDLE 可选值: ALL | IDLE | NONE
        position: [0, 30] # 模型在舞台中的位置。 默认值: [0,0] [横坐标,纵坐标]
        scale: 0.18 # 模型的缩放比例 默认值: 0.1
        # showHitAreaFrames: false # 是否显示点击区域 默认值: false
        stageStyle:
          width: 250
          height: 250
      - path: 'https://unpkg.com/live2d-widget-model-koharu@1.0.5/assets/koharu.model.json'
        scale: 0.12
        position: [0, 0]
        stageStyle:
          width: 250
        mobileScale: 0.08
        mobilePosition: [0, 0]
        mobileStageStyle: # 移动端时舞台的样式
          width: 180
      - path: 'https://unpkg.com/live2d-widget-model-haruto@1.0.5/assets/haruto.model.json'
        scale: 0.12
        position: [0, 0]
        mobileScale: 0.08
        mobilePosition: [0, 0]
        mobileStageStyle: # 移动端时舞台的样式
          width: 180
        stageStyle:
          width: 250
    parentElement: document.body #为组件提供一个父元素,如果未指定则默认挂载到 body 中
    primaryColor: 'var(--btn-bg)' # 主题色 支持变量
    sayHello: false # 是否在初始化阶段打印项目信息
    tips:
      style:
        width: 230
        height: 120
        left: calc(50% - 20px)
        top: -100px
      mobileStyle:
        width: 180
        height: 80
        left: calc(50% - 30px)
        top: -100px
      idleTips:
        interval: 15000
        # message:
        #   - 你好呀~
        #   - 欢迎来到我的小站~
        # 自定义提示语 需要 引入 axios 库,也可以使用其他方法
        message: |
          function(){
            return axios.get('https://v1.hitokoto.cn?c=i')
              .then(function (response) {
                return response.data.hitokoto ;
              })
              .catch(function (error) {
                console.error(error);
              });
          }
        # wordTheDay: true
        # 自定义  https://v1.hitokoto.cn  数据
        # wordTheDay: |
        #   function(wordTheDayData){
        #     return `${wordTheDayData.hitokoto}    by.${wordTheDayData.from}`;
        #   }
  # 具体方法请看: https://oml2d.com/guide/loadModel.html#oml2d-% E5% AE%9E% E4% BE%8B
  # then: |
  #    oml2d.onStageSlideIn(() => {
  #    oml2d.tipsMessage('Oh My Live2D !!!', 3000, 10);
  #    });

然后保存、部署、发布,便可以实现默认的看板娘的效果,也是非常美观的。

在调整模型的参数时,如果毫无前端知识的话很容易出错。需要知晓 stageStyle (舞台)相当于背景框,而模型的坐标则是相对于背景框左上角的偏移量。

# 自定义模型

如果想使用自己喜欢的看板娘模型,只需要在 models 里新增一块即可。

- path: 'http://unpkg.com/cat-white@1.0.0/model.json'
        scale: 0.12
        position: [0, 10]
        mobileScale: 0.08
        mobilePosition: [0, 0]
        mobileStageStyle: # 移动端时舞台的样式
          width: 180
        stageStyle:
          width: 250

如果想给一个模型增添不同服装(其实也是模型),将 path 改为列表即可

- path: ['https://unpkg.com/cat-white@1.0.0/model.json',
         'https://unpkg.com/cat-black@1.0.0/model.json']
        scale: 0.12
        position: [0, 10]
        mobileScale: 0.08
        mobilePosition: [0, 0]
        mobileStageStyle: # 移动端时舞台的样式
          width: 180
        stageStyle:
          width: 250

模型我是从下面的仓库下载的,同时我所使用的模型也已上传至我的仓库。下载方式见后文

模型的 path

  • 可以使用本地路径(不推荐)

    比如下载仓库中的 cat-white 模型,解压后置于根目录的 source 目录中, path 改为如下路径即可:

    /cat-white/model.json
    
  • 使用 unpkg 代理,具体方式见下文

# 模型下载

将 github 上的文件下载到本地时,会遇到一个问题:只能克隆整个仓库或者下载单一文件

对此推荐一个方便的浏览器插件:GitZip 。以 Edge 浏览器为例,在右上角的管理扩展中下载该插件即可

image-20250412142238282

之后再打开 github 仓库,就会发现每个文件和目录的左侧会出现勾选框,用来选中打包下载

image-20250412142411195

如果遇到下载速率限制(限制 60 次 /h),可以通过点击 GitZip 扩展图标,输入 GitHub API 访问令牌,便可提升至 5000 次 /h 。如果忘了访问令牌如何获取的话,网上教程很多,不再赘述

# 关于 CDN 代理

由于 jsdeliver 被墙了,我们采用 unpkg

unpkg 是一个专门为 npm 包设计的 CDN 代理服务。它的核心功能是 自动从 npm 仓库获取文件,并通过全球分布式节点加速分发,使我们能直接通过 URL 引用 npm 包中的静态资源

# 注册 npm

进入官网注册即可

# 整理项目结构

以下载的 cat-white 模型为例,项目结构如下

├─cat-white
│  ├─moc
│  └─mtn
|  └─model.json
|  └─tororo.pose.json
|  └─whitecat.pil.png
|  └─shitecat.png

这便是我们接下来进行操作的根目录

# 初始化 package.json

npm init

然后按照终端给出的提示信息进行填写。核心字段示例:

{
  "name": "cat-white",  				// 包名(确保在 npm 上唯一)
  "version": "1.0.0",
  "description": "Live2D model for cat-white",
  "entry point": "model.json",  		// 主入口文件
  "keywords": "cat-white"
  "author": "YourName",
  "license": "MIT"
}

完成后将会生成 package.json 文件

# 登录 npm 并发布

如果你使用的是 npm 镜像源,由于镜像源仅支持包的下载,你需要先切回 npm 官方源

npm config set registry https://registry.npmjs.org/

然后登录并发布

npm login
npm publish

成功后会显示

+ cat-white@1.0.0

# 通过 CDN 访问

发布成功后, path 使用如下方式直接引用即可

# https://unpkg.com/ 包名 /json 文件路径
https://unpkg.com/cat-white/model.json