Skip to content

Live2D / Spine 模型

Firefly 支持在页面上显示 Live2D 或 Spine 看板娘模型,两者可以二选一使用。

配置文件

src/config/pioConfig.ts

Spine 模型配置

基础配置

属性类型默认值说明
enablebooleanfalse是否启用 Spine 看板娘

模型配置

属性类型默认值说明
model.pathstring-Spine 模型文件路径(.json)
model.scalenumber1.0模型缩放比例
model.xnumber0X 轴偏移
model.ynumber0Y 轴偏移

位置配置

属性类型默认值说明
position.cornerstring"bottom-left"显示位置:"bottom-left" "bottom-right" "top-left" "top-right"
position.offsetXnumber0水平偏移量
position.offsetYnumber0垂直偏移量

尺寸配置

属性类型默认值说明
size.widthnumber135容器宽度
size.heightnumber165容器高度

交互配置

属性类型默认值说明
interactive.enabledbooleantrue是否启用交互功能
interactive.clickAnimationsstring[]-点击时随机播放的动画列表
interactive.clickMessagesstring[]-点击时随机显示的文字消息
interactive.messageDisplayTimenumber3000文字显示时间(毫秒)
interactive.idleAnimationsstring[]-待机动画列表
interactive.idleIntervalnumber8000待机动画切换间隔(毫秒)

响应式配置

属性类型默认值说明
responsive.hideOnMobilebooleantrue是否在移动端隐藏
responsive.mobileBreakpointnumber768移动端断点(px)

其他

属性类型默认值说明
zIndexnumber1000层级
opacitynumber1.0透明度(0-1)

Live2D 模型配置

Live2D 使用 l2d-widget 组件实现,支持 Cubism 2 和 Cubism 6 格式。

基础配置

属性类型默认值说明
enablebooleanfalse是否启用 Live2D 看板娘

模型配置

属性类型默认值说明
model.pathstring-Live2D 模型文件路径(model.json 或 model3.json),支持外部直连 URL
model.volumenumber0动作声音音量(0-1),默认 0 静音
model.scalenumber1模型缩放比例
model.xnumber0X 轴偏移,范围 -2~2,正值向右
model.ynumber0Y 轴偏移,范围 -2~2,正值向上

支持传入数组配置多个模型,菜单会自动出现切换按钮:

ts
model: [
  { path: "/models/cat-black/model.json" },
  { path: "/models/cat-white/model.json" },
]

位置配置

属性类型默认值说明
positionstring"bottom-left"显示位置:"bottom-left" "bottom-right"

尺寸配置

属性类型默认值说明
sizenumber | { width, height }{ width: 200, height: 200 }画布尺寸(px),可传数字或对象分别指定宽高

主题色

属性类型默认值说明
primaryColorstring"rgba(96,165,250,0.9)"主题色,用于菜单、状态条等 UI 元素。支持 CSS 变量如 "var(--primary)"

动画配置

属性类型默认值说明
transitionDurationnumber1500入场/退场动画时长(ms)
transitionType"slide" | "fade""slide"入场/退场动画类型

菜单配置

属性类型说明
menus.itemsMenuItem[]完全替换默认菜单项
menus.extraItemsMenuItem[]追加到默认菜单末尾
menus.align"left" | "right"菜单对齐方式

MenuItem 结构:

属性类型说明
iconstringIconify 图标名称,如 "mdi:home"
labelstring菜单项文本
actionstring动作标识,支持:"home" "scrollToTop" "sleep" "switchModel" "github"

提示气泡配置

属性类型默认值说明
tips.enablebooleantrue气泡开关,设为 false 则完全禁用提示气泡
tips.welcomeMessagestring[]-欢迎语,模型首次入场后随机取一条显示
tips.messagesstring[]-循环提示内容
tips.durationnumber3000每条提示展示时长(ms)
tips.intervalnumber6000提示循环间隔(ms)
tips.offset.xnumber0水平偏移(px),正值右移,负值左移
tips.offset.ynumber0垂直偏移(px),正值下移,负值上移

响应式配置

属性类型默认值说明
responsive.hideOnMobilebooleantrue是否在移动端隐藏
responsive.mobileBreakpointnumber768移动端断点(px)

Spine 完整示例

ts
export const spineModelConfig: SpineModelConfig = {
  enable: true,
  model: {
    path: "/pio/models/spine/firefly/1310.json",
    scale: 1.0,
    x: 0,
    y: 0,
  },
  position: {
    corner: "bottom-left",
    offsetX: 0,
    offsetY: 0,
  },
  size: { width: 135, height: 165 },
  interactive: {
    enabled: true,
    clickAnimations: ["emoji_0", "emoji_1", "emoji_2"],
    clickMessages: ["你好呀!", "今天也要加油哦!"],
    messageDisplayTime: 3000,
    idleAnimations: ["idle", "emoji_0"],
    idleInterval: 8000,
  },
  responsive: { hideOnMobile: true, mobileBreakpoint: 768 },
  zIndex: 1000,
  opacity: 1.0,
};

Live2D 完整示例

ts
export const live2dWidgetConfig = {
  enable: true,
  model: {
    path: "/pio/models/live2d/snow_miku/model.json",
  },
  position: "bottom-left",
  size: { width: 200, height: 200 },
  primaryColor: "var(--primary)",
  transitionDuration: 1500,
  transitionType: "slide",
  menus: {
    items: [
      { icon: "mdi:home", label: "返回主页", action: "home" },
      { icon: "mdi:arrow-up", label: "返回顶部", action: "scrollToTop" },
      { icon: "mdi:bed", label: "休眠", action: "sleep" },
      { icon: "mdi:github", label: "GitHub", action: "github" },
    ],
    align: "right",
  },
  tips: {
    welcomeMessage: ["你好!我是Miku~", "欢迎来到我的世界!"],
    messages: ["有什么需要帮助的吗?", "今天天气真不错呢!"],
    duration: 3000,
    interval: 6000,
  },
  responsive: { hideOnMobile: true, mobileBreakpoint: 768 },
};

WARNING

在右下角放置模型可能会遮挡返回顶部按钮,建议使用 "bottom-left" 位置。