Skip to content

API 参考

导出总览

ts
export { Live2DSprite } from './Live2DSprite'
export { Config, ConfigType, LogLevel, Priority } from './utils/config'
export { CubismSetting } from './utils/cubismSetting'

业务代码从根包导入:

ts
import type { ConfigType } from 'easy-live2d'
import {
  Config,

  CubismSetting,
  Live2DSprite,
  LogLevel,
  Priority
} from 'easy-live2d'

Live2DSprite

继承自 Pixi Sprite,是库的核心门面类。

构造函数

ts
new Live2DSprite(initConfig?: Live2DSpriteInit)

init

ts
sprite.init(config: Live2DSpriteInit): boolean

Live2DSpriteInit 定义:

ts
interface Live2DSpriteInit {
  modelPath?: string
  modelSetting?: CubismSetting
  ticker?: Ticker
  draggable?: boolean
}
字段类型说明
modelPathstring模型 .model3.json 路径
modelSettingCubismSetting手动构造的模型设置对象
tickerTickerPixi Ticker 引用
draggableboolean是否允许拖拽,默认 false
  • modelPathmodelSetting 至少提供一个。
  • 两者同时存在时优先使用 modelPath
  • 模型加载在 Pixi 首次渲染时触发,而非构造时立即执行。

公开属性

属性类型说明
modelPathstring | null模型路径
modelSettingCubismSetting | null模型设置对象
tickerTicker | nullTicker 引用
rendererRendererPixi 渲染器,首次渲染后可用
draggableboolean是否允许拖拽
widthnumber模型逻辑宽度(可读写)
heightnumber模型逻辑高度(可读写)
readyPromise<void>模型就绪后 resolve 的稳定 Promise(见下方说明)

继承自 Pixi Sprite 的属性同样可用:xyanchorscalerotationvisible 等。

基于 Promise 的 Ready API

除事件回调方式 onLive2D('ready', callback) 外,实例还提供了一个 async/await 友好的 API:ready,在模型、纹理及交互层加载完成后 resolve。

ready

ts
sprite.ready: Promise<void>

一个稳定的 Promise,在精灵就绪后 resolve。每次访问返回同一个 Promise 实例,多次 await 不会重复挂载监听器。

ts
await sprite.ready
sprite.startMotion({ group: 'TapBody', no: 0, priority: Priority.Normal })

事件

ts
sprite.onLive2D(eventName, callback)
事件名回调参数说明
ready()模型、纹理和交互层初始化完成
hit({ hitAreaName, x, y })点击命中模型 hit area
dragStart({ x, y, deltaX, deltaY })开始拖拽
dragMove({ x, y, deltaX, deltaY })拖拽移动中
dragEnd({ x, y, deltaX, deltaY })拖拽结束
  • hitxy 是模型视图坐标。
  • drag*xy 是精灵位置。

动作控制

startMotion

ts
sprite.startMotion(params: MotionParams): Promise<CubismMotionQueueEntryHandle>
ts
interface MotionParams {
  group: string
  no: number
  priority: number
  onStarted?: (motion: any) => void
  onFinished?: (motion: any) => void
}

按动作组和索引播放指定动作。ready 前调用会自动排队。

startRandomMotion

ts
sprite.startRandomMotion(params: Omit<MotionParams, 'no'>): Promise<CubismMotionQueueEntryHandle>

从指定动作组中随机播放一个动作。

releaseMotions

ts
sprite.releaseMotions(): void

释放已加载的动作缓存。

getMotions

ts
sprite.getMotions(): MotionInfo[]
ts
interface MotionInfo {
  group: string
  no: number
  name: string
}

获取模型所有可用动作列表。返回每个动作的分组名、索引和名称。模型就绪前调用返回空数组。

表情控制

setExpression

ts
sprite.setExpression(params: { expressionId: string } | { index: number }): void

设置指定表情。支持通过 expressionIdindex 指定,二选一。不存在时控制台输出警告。

setRandomExpression

ts
sprite.setRandomExpression(): void

随机切换表情。

releaseExpressions

ts
sprite.releaseExpressions(): void

释放已加载的表情缓存。

getExpressions

ts
sprite.getExpressions(): ExpressionInfo[]
ts
interface ExpressionInfo {
  name: string
}

获取模型所有可用表情列表。模型就绪前调用返回空数组。

驱动参数控制

setParameterValueById

ts
sprite.setParameterValueById(id: string, value: number, weight?: number): void

通过参数 ID 设置驱动参数的值。weight 为混合权重,默认为 1ready 前调用会自动排队。

设置的值会持久生效——每帧渲染时均自动重新写入。

ts
sprite.setParameterValueById('ParamAngleX', 15.0)

// 带权重
sprite.setParameterValueById('ParamMouthOpenY', 1.0, 0.8)

setParameterValueByIndex

ts
sprite.setParameterValueByIndex(index: number, value: number, weight?: number): void

通过参数索引设置驱动参数的值。weight 为混合权重,默认为 1ready 前调用会自动排队。

setParameterValueById,设置的值会持久生效。

ts
sprite.setParameterValueByIndex(0, 0.5)

getParameterValueRangeById

ts
sprite.getParameterValueRangeById(id: string): { min: number, max: number } | null

通过参数 ID 获取驱动参数的取值范围。模型未就绪或参数不存在时返回 null

ts
const range = sprite.getParameterValueRangeById('ParamAngleX')
// range => { min: -30, max: 30 }

getParameterValueRangeByIndex

ts
sprite.getParameterValueRangeByIndex(index: number): { min: number, max: number } | null

通过参数索引获取驱动参数的取值范围。模型未就绪或索引越界时返回 null

ts
const range = sprite.getParameterValueRangeByIndex(0)
// range => { min: -30, max: 30 }

语音控制

playVoice

ts
sprite.playVoice(params: VoiceParams): Promise<void>
ts
interface VoiceParams {
  voicePath: string
  immediate?: boolean
}
  • voicePath:音频资源路径,支持浏览器可解码的格式。
  • immediate:默认 true,先停止当前语音再播放新语音。
  • 口型同步依赖模型中的 LipSync 参数映射。

stopVoice

ts
sprite.stopVoice(): void

停止当前语音。

尺寸与生命周期

getModelCanvasSize

ts
sprite.getModelCanvasSize(): { width: number, height: number, pixelsPerUnit: number } | null

返回模型原始画布尺寸。模型未就绪时返回 null

getSize

ts
sprite.getSize(out?: Size): Size

返回当前显示尺寸。

setSize

ts
sprite.setSize(value: number | { width: number, height?: number }, height?: number): void

设置显示尺寸。

onResize

ts
sprite.onResize(): void

手动触发视图重算。通常不需要调用,内部 ResizeObserver 会自动处理。

destroy

ts
sprite.destroy(options?: DestroyOptions): void

清理所有资源:指针事件、ResizeObserver、WebGL 纹理、Live2D 上下文、Cubism 生命周期。


Config

全局配置单例,建议在创建 Live2DSprite 之前设置。

ts
import { Config, LogLevel } from 'easy-live2d'

Config.MotionGroupIdle = 'Idle'
Config.MouseFollow = true
Config.CubismLoggingLevel = LogLevel.LogLevel_Warning

字段

字段类型默认值说明
ViewScalenumber1.0初始视图缩放
ViewMaxScalenumber2.0最大缩放
ViewMinScalenumber0.8最小缩放
ViewLogicalLeftnumber-1.0逻辑视图左边界
ViewLogicalRightnumber1.0逻辑视图右边界
ViewLogicalBottomnumber-1.0逻辑视图下边界
ViewLogicalTopnumber1.0逻辑视图上边界
ViewLogicalMaxLeftnumber-2.0视图移动最大左边界
ViewLogicalMaxRightnumber2.0视图移动最大右边界
ViewLogicalMaxBottomnumber-2.0视图移动最大下边界
ViewLogicalMaxTopnumber2.0视图移动最大上边界
MotionGroupIdlestring'Idle'动作结束后回落的 idle 动作组
MOCConsistencyValidationEnablebooleantruemoc 一致性校验
DebugLogEnablebooleantrue启用 Cubism 日志
DebugTouchLogEnablebooleanfalse输出点击坐标日志
CubismLoggingLevelLogLevelLogLevel_VerboseCubism 日志级别
MouseFollowbooleantrue模型跟随鼠标
MotionSoundbooleantrue是否在 startMotion 时自动播放动作绑定的音效
crossOriginstring | undefined'anonymous'纹理图片的 crossOrigin 属性,用于避免 WebGL 跨域纹理导致的 SecurityError。可设为 'anonymous''use-credentials'undefined(禁用,不推荐)。

crossOrigin 说明

Config.crossOrigin 会在所有纹理图片(用于 texImage2D<img>)加载前统一设置 img.crossOrigin,避免浏览器将 WebGL 画布标记为 "tainted",从而防止出现以下错误:

SecurityError: The operation is insecure.

类型与取值:

取值说明
'anonymous'发起匿名跨域请求(不携带 Cookie/证书),服务端需返回 Access-Control-Allow-Origin(默认值)
'use-credentials'携带凭据(Cookie、客户端证书等),服务端 Access-Control-Allow-Origin 不能为 *,且需设置 Access-Control-Allow-Credentials: true
undefined不设置 crossOrigin,跨域纹理可能导致 WebGL 上传失败,不推荐

使用示例:

ts
import { Config } from 'easy-live2d'

// 默认值,通常无需手动设置
Config.crossOrigin = 'anonymous'

// 若需携带 Cookie 等凭据
Config.crossOrigin = 'use-credentials'

// 禁用(不推荐,跨域资源可能引发 SecurityError)
Config.crossOrigin = undefined

注意事项

  • 请在创建 Live2DSprite 实例之前设置此项,以确保所有纹理加载均生效。
  • 资源服务器必须返回正确的 Access-Control-Allow-Origin 响应头;使用 'use-credentials' 时,服务端还需返回 Access-Control-Allow-Credentials: true,且 Access-Control-Allow-Origin 不能为通配符 *
  • 若将此项设为 undefined,加载跨域纹理时 WebGL 可能抛出 SecurityError

resetConfig

ts
Config.resetConfig(): void

恢复所有字段为默认值。


ConfigType

Config 对象的 TypeScript 类型定义,仅用于类型标注。


Priority

动作优先级枚举。

ts
enum Priority {
  None = 0, // 不主动抢占
  Idle = 1, // 空闲动作
  Normal = 2, // 普通动作
  Force = 3, // 强制打断当前动作
}

LogLevel

从 Cubism Framework 透出的日志级别枚举,用于 Config.CubismLoggingLevel

成员说明
LogLevel.LogLevel_Verbose详细日志
LogLevel.LogLevel_Debug调试日志
LogLevel.LogLevel_Info信息日志
LogLevel.LogLevel_Warning警告日志
LogLevel.LogLevel_Error错误日志
LogLevel.LogLevel_Off关闭日志

CubismSetting

模型配置包装类,适合运行时接收 model3.json 内容并控制资源路径。

构造函数

ts
new CubismSetting({ modelJSON: any, prefixPath?: string })
字段说明
modelJSON已解析的 model3.json 对象
prefixPath资源公共前缀路径

redirectPath

ts
setting.redirectPath(redirFn: ({ file: string }) => string): void

对 moc、纹理、物理、姿态、表情、动作、用户数据的路径逐项改写。改写优先级高于 prefixPath

ts
const setting = new CubismSetting({
  modelJSON,
  prefixPath: '/Resources/Hiyori/',
})

setting.redirectPath(({ file }) => {
  return `https://cdn.example.com/live2d/hiyori/${file}`
})

Last updated:

Released under MPL-2.0