← 作品展
CASE 04 / 05
Pixi 8 · R5 Core
Easy Live2D · Sprite 封装
easy-live2d
Pixi 8 + Cubism 5 R5 Core · 现代封装
模型变成 Sprite,await ready 后即可驱动。
easy-live2d 依赖 WebGL 2,库与官方模型都在仓库内;若人物未出现,请通过本地 HTTP 服务访问本页并确认浏览器支持 WebGL 2。
可对照 03 · Pixi 舞台。
LIVE DEMO · 04
拖动角色 · 点击切换表情
操作:拖动 / 点击 / 按钮模型:Haru · 本地资源
01
实现要点
Implementation- 异步初始化:Pixi 8 改为
await app.init();easy-live2d 1.x 强制 WebGL 2,代码先做能力检测。 - Sprite 封装:
new EasyLive2D.Live2DSprite({ modelPath, draggable: true }),await sprite.ready之后才有可用尺寸。 - 画布留白换算:各模型画布尺寸与留白不同,先渲染一帧读回像素量出人物可见范围,再按可见范围等比缩放、贴底并水平居中,避免人物偏小或偏移。
- 交互与性能:
onLive2D('hit')命中 Head/Body 触发 TapBody;按钮随机动作/表情;页面隐藏时暂停 ticker。
02
关键代码
Code
JS
const app = new PIXI.Application();
await app.init({ canvas, resizeTo: stage, preference: 'webgl' });
EasyLive2D.Config.MotionGroupIdle = 'Idle';
const sprite = new EasyLive2D.Live2DSprite({
modelPath: '../models/' + id + '/' + id + '.model3.json', draggable: true
});
app.stage.addChild(sprite);
await sprite.ready;
sprite.onLive2D('hit', () => sprite.startRandomMotion({ group: 'TapBody' }));
03
注意
Caveats- 需要支持 moc3 5.3 的 R5 Core;旧 Core 保留给案例 03,两个 Core 文件分开存放,避免版本串用。
- Pixi 8 与 easy-live2d 已在构建阶段用 esbuild 打成单个本地 bundle。