1.0.8 • Published 10 months ago

live2d-lib v1.0.8

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

live2d-lib

live2d-lib 是一个基于 Cubism 4.x SDKlive2d 加载 API

✨特点

  • 支持 CDNESModule
  • 使用新版本 Cubism 4.x
  • 支持 TypeScript
  • 支持自定义渲染位置
  • 支持事件监听

🌈安装

npm install live2d-lib -D

# yarn
yarn add live2d-lib -D

# pnpm
pnpm add live2d-lib -D

🛠️使用

  • CDN
<script src="https://unpkg.com/live2d-lib"></script>
<script>
  window.onload = () => {
    Live2dWidget.init({
      canvas: {
        width: 460,
        height: 600,
      },
      source: {
        path: '/live2d/models',
        models: [ 'hijiki', 'tororo' ]
      },
    })
  }
</script>
  • ESModule
import Live2dWidget from 'live2d-lib'

Live2dWidget.init({
  canvas: {
    width: 460,
    height: 600,
  },
  scale: 1,
  debug: false,
  target: document.querySelector('#sample'),
  source: {
    path: '/live2d/models',
    models: [ 'hijiki', 'tororo' ]
  },
})
  • 说明

live2dcubismcore.min.js 不支持 ESMdule,为避免二次编译时 __dirnamenode 模块报错, ESModule 格式文件中对其采用静态资源引入的方式,live2d-lib 安装完成后会自动将资源拷贝至项目根目录的 public 目录中(e.g.,public/live2d/core/live2dCubismCore.min.js); iife 格式文件中依旧使用捆绑模式。

🔑 API

  1. 场景加载
Live2dWidget.init(options: LAppDefineOptions)
参数名参数说明可选默认值
canvascanvas 元素的宽高,为 auto 时使用窗口大小true{width: 280,height: 360}
scale视觉效果缩放比true1.0
debug是否打印交互信息truefalse
target模型要渲染的的位置truedocument.body
cubismCorePathCubism Core for Webtrue/live2d/core/live2dCubismCore.min.js
source模型资源的路径false{path:'',models:[]}

source 不提供默认参数值,参数内容为:

  • path - 存放资源的目录,npm 包的 resources 文件夹中提供了一些官方模型。

  • models - 资源的目录名称,目录名称必须与文件名称前缀相同。

const options: LAppDefineOptions = {
  source: {
    path: '../resources',
    models: [ 'hijiki', 'tororo' ]
  }
}

模型的资源路径会通过 path.join() 处理,上方示例中模型路径会拼接为 ../resources/hijiki/hijiki.model3.json

  1. 场景切换
// 上一场景
Live2dWidget.scene.prevScene()

// 下一场景
Live2dWidget.scene.nextScene()
  1. 事件监听

支持对头部、身体、左右区域(例如:左右胳膊)点击事件监听。(需要模型支持重叠检测)

Live2dWidget.on(type: HitArea, callback: ()=>void)
  1. 参数类型定义
  • LAppDefineOptions
interface CanvasOptions {
  width: number;
  height: number;
}

interface SourceOptions {
  path: string;
  models: string[];
}

export interface LAppDefineOptions {
  canvas?: CanvasOptions | 'auto';
  scale?: number;
  debug?: boolean;
  target?: HTMLElement;
  cubismCorePath?: string;
  source: SourceOptions;
}
  • HitArea
export enum HitArea {
  Head = 'Head',
  Body = 'Body',
  Left = 'Left',
  Right = 'Right',
  Other = 'Other'
}
  • MotionGroup
export enum MotionGroup {
  Idle = 'Idle', // 空闲
  TapBody = 'TapBody', // 当轻拍身体时
  TapLeft = 'TapLeft', // 当轻拍身体左侧时(左胳膊)
  TapRight = 'TapRight', // 当轻拍身体右侧时(右胳膊)
  Tap = 'Tap' // 当点击重叠检测区域之外时
}

🎯 重叠检测

请阅读官网文档:重叠检测的设置准备

重叠检测图形网格的 ID 命名时保证不唯一即可,name 需要使用 HitArea 提供的除了 HitArea.Other 之外的值,HitArea.Other 用于处理非重叠检测区域的点击操作;

点击 Head 区域将执行脸部表情,对应的内容不在 Motions 中配置而是在 Expressions;如果需要在点击重叠检测区域之外时播放动作,请在 Motions 中配置 Tap 字段;

HitAreasMotions 的对应关系如下:

  • HitArea.Body -> MotionGroup.TapBody

  • HitArea.Left -> MotionGroup.TapLeft

  • HitArea.Right -> MotionGroup.TapRight

  • 非检测区域(HitArea.Other) -> MotionGroup.Tap

xxx.model3.json 配置示例如下:

{
  "FileReferences": {
    "Expressions": [
      {
        "Name": "Angry.exp3.json",
        "File": "expressions/Angry.exp3.json"
      }
    ],
    "Motions": {
      "Idle": [
        {
          "File": "motion/00_idle.motion3.json"
        }
      ],
      "TapBody": [
        {
          "File": "motion/02.motion3.json"
        }
      ],
      "TapLeft": [
        {
          "File": "motion/06.motion3.json"
        }
      ],
      "TapRight": [
        {
          "File": "motion/01.motion3.json"
        }
      ],
      "Tap": [
        {
          "File": "motion/01.motion3.json"
        }
      ]
    }
  },
  "HitAreas": [
    {
      "Id": "HitAreaBody",
      "Name": "Body"
    },
    {
      "Id": "HitAreaLeft",
      "Name": "Left"
    },
    {
      "Id": "HitAreaRight",
      "Name": "Right"
    }
  ]
}
1.0.2

12 months ago

1.0.8

10 months ago

1.0.7

10 months ago

1.0.6

11 months ago

1.0.5

12 months ago

1.0.4

12 months ago

1.0.3

12 months ago

1.0.1

12 months ago

1.0.0

12 months ago