ByteNoteByteNote

字节笔记本

2026年6月3日

MacArkPet 自定义桌宠形象:三种方案从替换到魔改

API中转
¥120

MacArkPet 支持自定义桌宠形象,但它的渲染方式是通过 WKWebView 运行 Spine/WebGL 模型,不是简单换张头像。以下是三种可行的自定义方案。

方案一:替换已有模型资源

最简单的方式,不需要改代码。

先同步模型:

bash
open ~/Library/Application\ Support/MacArkPet/ArkModels

进入目录后找到角色文件夹,每个 Spine 模型包含三个文件:

text
xxx.json       # 骨骼和动画数据
xxx.atlas      # 纹理图集映射
xxx.png        # 贴图

替换方法:

  1. 复制一个已有角色文件夹,重命名
  2. 把里面的 json / atlas / png 换成你的 Spine 模型
  3. 保持文件命名和目录结构一致
  4. 重启 MacArkPet

方案二:自己制作 Spine 桌宠模型

这是真正的自定义形象,需要准备:

  1. 角色立绘拆分成独立图层(身体、头、手臂、腿等)
  2. 在 Spine Editor 中导入、搭建骨骼
  3. 制作动画,建议按 MacArkPet 支持的状态命名:
动画名称说明
idle待机
walk行走
sit坐下
sleep睡觉
touch互动
special特殊动作
  1. 导出为 json / atlas / png 格式
  2. 放入 ArkModels 目录

如果动画名称不匹配,可能出现模型能加载但某些动作播放不了的情况。

方案三:魔改代码支持普通图片

如果不想折腾 Spine,只想放自己的小人、猫、机器人,可以修改 MacArkPet 的渲染层。

项目结构:

text
Sources/MacArkPet/     Swift 源代码
Resources/             Spine runtime 和资源

简单改法:保留桌宠窗口、拖拽、置顶、穿透等 macOS 能力,把 WebGL Spine 渲染换成普通图片视图:

swift
// 替换 WKWebView 渲染为 NSImageView
let imageView = NSImageView(frame: petWindow.frame)
imageView.image = NSImage(named: "my_pet_idle")
petWindow.contentView?.addSubview(imageView)

更完善的方案是把渲染层抽象成多渲染器架构:

swift
protocol PetRenderer {
    func render(state: PetState)
}

class SpineRenderer: PetRenderer {
    // WKWebView + Spine WebGL
}

class ImageRenderer: PetRenderer {
    // NSImageView + PNG/GIF
}

这样既能跑明日方舟风格的 Spine 模型,也能跑普通图片角色。

一键安装自定义素材包

如果你想快速测试,可以使用社区提供的自定义 PNG 桌宠素材包:

bash
# 下载解压后执行
bash scripts/install_to_macarkpet.sh

重启 MacArkPet,搜索 CustomMVP 即可看到自定义角色。

注意:原版 MacArkPet 默认只显示主图,不会自动切换 idle/move/sleep 等状态帧。需要额外修改 PetView 的渲染逻辑才能实现多帧动画切换。

分享: