mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
667 字
2 分钟
草莓兔兔-LIVE2D
2026-03-26

一声梧叶一声秋,一点芭蕉一点愁,三更归梦三更后。—— 水仙子·夜雨。#


写在前面#

Mizuki博客已经为我们提供了看板娘配置,但是由于部分功能的限制,现在的live2d 使用的 Pio 项目只支持 SDK2 模型,想换一个自己更喜欢的模型但是目前网络上流传的大多为 SDK3 以上,所以尝试着借助ai的神力修改了部分代码使得适用mizuki现在也能适配SDK3.

本文章借鉴了柊镜大佬的文章,并加以简化,绝对不是因为我懒😴
其实就是因为我很懒也很菜,在此表达感谢!!!

再对mikus表示感谢!感谢兄弟的耐心指导!

LIVE2D#

Live2D是由日本Cybernoids公司(后更名为Live2D株式会社)开发的一款2D图像渲染技术及相应软件。它通过网格变形等技术,将静态的2D图像转化为可动态渲染的角色模型,使其能够展现丰富的表情和动作,同时保留原画的风格与质感。该技术广泛应用于手机游戏、主机游戏、虚拟主播(VTuber)、动画及应用程序等领域,已成为2D实时动画表现的业界标准工具。自2008年发布以来,其编辑器Cubism Editor及相关SDK支持多平台开发,被全球众多商业项目所采用.

[!IMPORTANT] IMPORTANT 本教程仅适用于Mizuki 8.2(1dcaa61)或更高版本.


Mizuki配置#

这里依旧参考了Dreamer-Paul大佬的github项目,已经给大佬点上了⭐.

Dreamer-Paul
/
Pio
Waiting for api.github.com...
00K
0K
0K
Waiting...
  1. 本地克隆
Terminal window
git clone https://github.com/Dreamer-Paul/Pio.git

或访问仓库下载发行版压缩包

  1. X:\xxx\Pio-master\Pio-master\static目录下所有文件替换到如下路径:X:\xxxx\xxxx\public\pio\static
  2. X:\XXX\XXX\src\components\features\pio\下的Pio.svelte的文件修改为: 以上为mizuki9.0及以上版本使用方法,若使用8.0-9.0的版本,Pio.svelte文件位于X:\xxx\src\components\widgets\Pio.svelte,直接替换即可
Pio.svelte
<script>
import { onDestroy, onMount } from "svelte";
import { pioConfig } from "@/config";
const pioOptions = {
mode: pioConfig.mode,
hidden: pioConfig.hiddenOnMobile,
content: pioConfig.dialog || {},
model: pioConfig.models || ["/pio/models/pio/model.json"],
};
// 从 config 获取 SDK 版本,如果没有则自动判断
const sdkVersion = pioConfig.sdkVersion || (pioOptions.model[0].includes("model3.json") ? 4 : 2);
const isModel3 = sdkVersion >= 3;
let pioContainer;
let pioCanvas;
let pioInitialized = false;
// 初始化函数
function initPio() {
if (typeof window !== "undefined" && typeof Paul_Pio !== "undefined") {
try {
if (pioContainer && pioCanvas && !pioInitialized) {
// 如果是 SDK4,手动初始化 Pixi 环境
if (isModel3 && typeof window.initPioPixi === "function") {
window.initPioPixi(pioConfig.position || 'left');
}
// 实例化 Paul_Pio
new Paul_Pio(pioOptions);
pioInitialized = true;
console.log(`Pio initialized successfully (SDK${sdkVersion})`);
}
} catch (e) {
console.error("Pio initialization error:", e);
}
} else {
setTimeout(initPio, 100);
}
}
// 核心:资源加载器
async function loadPioAssets() {
if (typeof window === "undefined") return;
const loadScript = (src, id) => {
return new Promise((resolve, reject) => {
// 检查是否已存在(避免 Swup 重复加载)
const existing = document.querySelector(`script[src="${src}"]`);
if (existing || document.querySelector(`#${id}`)) {
console.log(`[Pio] Script already loaded: ${src}`);
resolve();
return;
}
const script = document.createElement("script");
script.id = id;
script.src = src;
script.onload = () => {
console.log(`[Pio] Loaded: ${src}`);
resolve();
};
script.onerror = (e) => {
console.error(`[Pio] Failed to load: ${src}`, e);
reject(e);
};
document.head.appendChild(script);
});
};
try {
if (isModel3) {
// === SDK 4 加载流程 (严格顺序) ===
// 1. 加载 Live2D Cubism Core (必须第一个)
await loadScript(
"https://cubism.live2d.com/sdk-web/cubismcore/live2dcubismcore.min.js",
"cubism-core"
);
// 2. 加载 PixiJS (必须第二个)
await loadScript(
"https://cdn.jsdelivr.net/npm/pixi.js@5.3.6/dist/pixi.min.js",
"pixi-js"
);
// 3. 确认 PIXI 存在
if (typeof PIXI === 'undefined') {
throw new Error("[Pio] PIXI not loaded!");
}
console.log("[Pio] PIXI version:", PIXI.VERSION);
// 4. 加载 Pixi-Live2D-Display
await loadScript(
"https://cdn.jsdelivr.net/npm/pixi-live2d-display/dist/cubism4.min.js",
"pixi-live2d-display"
);
// 5. 加载本地适配器
await loadScript("/pio/static/pio_sdk4.js", "pio-sdk4-adapter");
// 6. 加载 UI 逻辑
await loadScript("/pio/static/pio.js", "pio-main");
} else {
// === SDK 2 加载流程 ===
await loadScript("/pio/static/l2d.js", "l2d-lib");
await loadScript("/pio/static/pio.js", "pio-main");
}
// 全部加载完成后,初始化
setTimeout(initPio, 100);
} catch (err) {
console.error("Failed to load Pio assets:", err);
}
}
onMount(() => {
if (!pioConfig.enable) return;
if (pioConfig.hiddenOnMobile && window.matchMedia("(max-width: 1280px)").matches) return;
setTimeout(loadPioAssets, 0);
});
// 清理(可选,防止 Swup 切换时出问题)
onDestroy(() => {
pioInitialized = false;
});
</script>
{#if pioConfig.enable}
<div class={`pio-container ${pioConfig.position || 'left'}`} bind:this={pioContainer}>
<div class="pio-action"></div>
<canvas
id="pio"
bind:this={pioCanvas}
width={pioConfig.width || 280}
height={pioConfig.height || 250}
style="width: {pioConfig.width || 280}px; height: {pioConfig.height || 250}px;"
></canvas>
</div>
{/if}
<style>
#pio { display: block; }
</style>
  1. 将您下载好live2d模型解压后放至X:\XXX\XXX\public\pio\models文件夹内,
  1. config.ts文件内,找到并修改以下内容(671-693行):
// Pio 看板娘配置
export const pioConfig: import("./types/config").PioConfig = {
enable: true, // 启用看板娘
models: ["/pio/models/wwa/wwa.model3.json"], // 默认模型路径
position: "left", // 模型位置
width: 280, // 默认宽度
height: 400, // 默认高度
其他内容···
WARNING

默认模型路径必须与XXX.model3.json文件名一致,否则无法正常显示。
如需改变文件的命名方式,必须在文件内修改XXX.model3.jsonXXX.vtube.json内文件引用的命名。


LIVE2D模型下载#


分享

如果这篇文章对你有帮助,欢迎分享给更多人!

草莓兔兔-LIVE2D
https://yqamm.cc.cd/posts/Jiqiao/260322pio
作者
QTY
发布于
2026-03-26
许可协议
CC BY 4.0

部分信息可能已经过时

目录