新手向完全从0开始的L2D网页挂件教学
从0到网页上线:制作一整套Live2D网页挂件的新手流程
注意:此文由整个过程陪伴我的狗屁通老师chatGPT所写,我修改了其中部分内容,但整体都保留了,有什么问题可以找它负责。
主要针对会画图的人,想使用自己画的live2D看板娘挂件而写。
如果你想直接用现成的,可以看看live2d-widget。
本站猫猫的制作记录可以看这里。
live2D软件使用部分,需要自行学习如何制作,推荐一边看官方视频教程,一边自己动手做,遇到问题再问GPT,1-2天即可做出一只猫猫。
代码部分,不会的话就直接叫GPT帮忙生成即可。也可以在实际做完后让它生成一份学习笔记,可以顺便学一下。
不过就我的经验来说,有这个时间死磕代码,不如再多搓几只猫猫……如果你是程序员当我没说。(程序员不需要看这篇文章吧!)
这份笔记整理的是一条实际跑通的路线:先用官方样例碗中小年糕(文件夹名:Wanko)跑通 Web SDK → 修改鼠标跟随与画布 → 接入 NotionNext / Danbouru → 再替换成自己的猫猫模型 → 最后部署到远程网页。适合第一次做 Live2D 网页挂件的人参考。本文以 Live2D Cubism 5.x + 官方 Web SDK 为主,不使用第三方 renderer。PS:理论上使用任意样例都行,但需要注意版本兼容。
1. 整体思路
整个项目可以拆成 4 层:
- Live2D Editor
- 负责制作模型本体
- 参数
- 物理
- 动画
- 导出
.model3.json / .moc3 / textures / motions / physics
- Cubism Web SDK Demo
- 负责让模型在浏览器里运行
- 鼠标跟随
- WebGL 绘制
- canvas
- 模型加载
- 网页挂件入口
- 负责把 Core 和 widget JS 加载进网页
- 判断桌面 / 手机
- 避免重复加载
- 最终网站
- 例如 NotionNext / Danbouru
- 负责实际展示
- Vercel / 其他平台部署
可以把它理解成:
2. 准备工具
需要准备:
- Live2D Cubism Editor 5.x
- Cubism SDK for Web
- Cubism Web Framework
- Cubism Web Samples
- Node.js
- npm
- Git
- GitHub Desktop
- VS Code
- 一个可部署的网站项目
Windows 下推荐:
如果 PowerShell 因执行策略阻止 npm,可以改用 CMD。
3. 先不要急着上自己的模型
新手最稳妥的办法是:
先用官方 Wanko 模型把网页端整个流程跑通。
这样可以把问题分开:
- 如果 Wanko 都跑不起来 → Web SDK / 路径 / build 有问题
- 如果 Wanko 正常,自己的模型不正常 → 模型导出或参数问题
这一步非常重要。
4. 跑通官方 Cubism Web Demo
进入官方 Demo 目录,例如:
Windows CMD 跨盘符时:
安装:
编译:
本地运行:
确认官方 Demo 页面可以打开。
5. 只加载一个模型
为了调试简单,建议先只保留 Wanko。
在:
里把模型列表改成只加载:
这样不会同时加载 Haru、Hiyori 等其他样例。
6. 解决 Wanko 鼠标跟随问题
一个容易踩到的坑:
官方新 Samples 默认使用新版参数名,例如:
但 Wanko 是旧参数命名:
所以如果直接跑新版 Demo,Wanko 可能显示正常,但头不会跟随鼠标。
在:
的
setupLook() 中改成 Wanko 的 legacy 参数:改完后 Wanko 的头和身体就可以跟随。
7. 让模型跟随整个网页鼠标,而不是只在 canvas 内
官方 Demo 通常只在 canvas 捕获区域内响应。
作为网页挂件,希望:
鼠标移动到网页任何位置,角色都能看过去。
在:
中修改
onPointMoved():这一步的作用是:
这样即使挂件 canvas 很小,也能跟随整个页面鼠标。
8. 透明背景
网页挂件通常不需要 Demo 的背景色。
在:
将:
改成透明:
这样 canvas 背景就是透明的。
9. 删除 Demo 背景图和齿轮按钮
官方 Demo 默认有背景图、齿轮等 UI。
网页挂件一般不需要。
在:
把
initializeSprite() 简化成只创建 shader:如果原代码里有:
相关 release 或点击逻辑,也需要相应移除或注释。
10. 把 canvas 做成真正的网页挂件
在:
创建 canvas 时设置样式。
例如:
这里几个关键点:
固定定位
这样页面滚动时挂件不会跟着内容移动。
左下角位置
负数完全可以,用来把 canvas 的空白区域推出屏幕。
不阻挡网页点击
这非常重要。
否则 Live2D canvas 会盖在网页按钮和链接上面。
11. 调整位置时不要每次都 build
为了快速找合适的位置,可以先在浏览器:
直接改 inline style:
浏览器会实时移动。
确认最终坐标后,再回到:
正式写入。
这样调试效率会高很多。
12. 让 Demo 支持动态 script 加载
官方 Demo 原本往往依赖:
如果以后把它作为动态
<script> 插入网页,页面可能早就 load 完了。所以在:
改成:
这样:
- 页面尚未加载完 → 等 load
- 页面已经加载完 → 立即启动
这对“网页挂件 JS”非常关键。
13. 资源路径改成绝对路径
为了让模型在任意页面路由都能正常加载,推荐使用网站根路径。
在:
例如:
不要依赖相对路径:
否则进入:
时很容易 404。
14. 配置 Vite 输出固定文件名
默认 Vite build 会生成带 hash 的 JS。
网页挂件更适合固定:
在官方原本的:
里保留原配置,只修改 build 输出:
同时:
注意:
不要为了这一步新建一个极简vite.config.ts覆盖官方配置。
否则很容易把原 Demo 的 alias / publicDir 等配置丢掉。
15. Build 出最终 widget
修改完成后:
确认生成:
这个 JS 就是最终网页端运行核心。
16. 把运行资源复制到网站项目
例如网站使用:
最终结构可以是:
如果以后换成自己的模型:
即可。
17. 网站端加载方式
网站需要先加载 Cubism Core,再加载:
例如 React / Next.js 中可以写一个 loader component:
18. 手机端不要初始化
如果挂件只想在桌面显示:
最好不是“手机端隐藏 canvas”,而是“手机端根本不加载 Live2D”。
也就是在 loader 最前面:
这样手机端不会下载:
可以节省流量和性能。
19. 防止重复加载
Next.js / React route 切换、Strict Mode、Fast Refresh 都可能让组件重新 mount。
所以要加全局标记:
加载成功:
这样不会出现:
20. 本地调试顺序
建议每次修改都按这个顺序排查:
第一步:Demo 本身
确认官方 Demo 可以显示模型。
第二步:确认 build 文件存在
第三步:复制到网站
复制到:
第四步:直接访问 JS
浏览器打开:
确认不是 404。
第五步:直接访问模型
例如:
第六步:看首页
最后才看挂件是否显示。
21. 一个实际踩过的坑:build 后忘了复制 JS
很容易出现:
原因并不是 Live2D 挂了,而是:
没有复制回:
所以建议每次 build 后都检查:
22. Git / .gitignore
为了避免把整个 SDK 文档、source map 等都提交到仓库,可以只保留运行必要文件。
例如:
以后换成自己的模型,把:
改成自己的模型目录即可。
23. 部署远程网站
如果使用 Vercel:
部署后先检查:
这些都正常,再检查首页挂件。
24. 从 Wanko 替换成自己的模型
网页端跑通后,才开始替换模型是最省事的。
Cubism Editor 里主要需要准备:
- 总之,先学会使用并制作live2D模型即可!
25. 自己的模型参数命名
如果想让新版 SDK 更方便,可以直接使用常见标准参数名:
这样
setupLook() 不需要像 Wanko 那样额外兼容 legacy ID。26. 鼠标交互可以这样设计
这是目前本站使用的方案:
27. 动画建议
例如:
摇头
避免浏览器切动画时末尾被截断。
睡觉
可以拆成:
网页端逻辑再决定:
28. 物理建议
适合做物理的:
不适合完全靠物理控制的:
头部通常直接由参数控制,耳朵尾巴再跟随物理。
29. texture 尺寸
网页挂件没必要放超大纹理。
可以根据实际显示尺寸压缩。
例如:
具体取决于模型画布和细节。
原则:
网页上最终只显示 200~400px 左右,就没有必要上传原始超大 PSD / PNG。
30. 关于“防盗图”
只要 Live2D 在浏览器显示:
texture 数据最终一定会发送到用户浏览器。
所以不能真正做到:
能做的是提高提取门槛:
- 发布缩小后的 texture
- 不上传原始 PSD
- 私有源码仓库
- texture 打进 JS
- 转 blob / binary
- 隐性水印
- 只公开网页运行尺寸
但这些都只是增加成本,不是绝对防止提取。
……随便吧你又不是把PSD原图放了上去!
31. 以后可以做成“一条 JS 地址即可使用”
最终可以把整个挂件包装成:
让朋友只需要引用一个入口 JS。
入口 JS 内部负责:
使用者不需要理解 Cubism SDK。
32. 可以继续加配置参数
例如未来可以设计成:
这样可以自己调整:
33. 最终推荐目录结构
34. 最重要的新手经验
如果只记住几件事,可以记这些:
- 先用官方样例模型跑通网页,再换自己的模型。
- 模型问题和网页问题要分开排查。
- 路径尽量用
/live2d/...绝对路径。
- canvas 一定要
pointer-events: none。
- 手机端最好完全不初始化。
- Next.js 要防止重复加载。
- 每次 build 后确认
live2d-widget.js已复制到网站。
- 不要一开始就魔改太多 SDK 文件,一次改一个变量。
- 位置调试先用 DevTools,不要每次重新 build。
- Web Live2D 的 texture 本质上一定会下发到浏览器。
35. 一句话版流程
36. 后续可继续扩展
在基础挂件稳定以后,可以继续做:
- 自动眨眼
- 呼吸待机
- 点击播放动作
- 点击循环 N 次
- 长时间无操作进入睡眠
- 鼠标移动唤醒
- 多动作随机播放
- 表情切换
- 夜间模式
- 用户自定义位置
- 用户自定义缩放
- 通用
model-widget.js
- 跨域 CORS
- 多网站复用
- 单 JS 引用式分发
这时它就不再只是“网站里的一只 Live2D”,而是一套可以独立分享的网页挂件系统。