npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@white-matrix/live2d-lib

v0.0.1

Published

A live2d loading API based on the Cubism 4.x SDK

Downloads

4

Readme

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)

| 参数名 | 参数说明 | 可选 | 默认值 | |----------------|-----------------------------|-------|--------------------------------------| | canvas | canvas 元素的宽高,为 auto 时使用窗口大小 | true | {width: 280,height: 360} | | scale | 视觉效果缩放比 | true | 1.0 | | debug | 是否打印交互信息 | true | false | | target | 模型要渲染的的位置 | true | document.body | | cubismCorePath | Cubism Core for Web | true | /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"
    }
  ]
}