DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

panchalkmetkh249-alt /

panchalkmetkh249-alt/dsh-bigfeiyu-focus

Verified

让 DSH 桌宠「大肥鱼」(dsh-pet) 的视线跟随鼠标:带透视的 3D 转头 + 视差位移,独立插件,不修改 dsh-pet。

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@f9eb9856

大肥鱼视线跟随 · dsh-bigfeiyu-focus

给 DSH 桌宠 dsh-pet(那条吃白饭的蓝色大肥鱼)加一层视线跟随:鼠标在哪边,鱼头就朝哪边转过去;鼠标歇着的时候,它自己慢慢东张西望。

这是一个独立插件:不 fork、不修改 dsh-pet 的任何文件。装上它,桌宠本体还是原来那个;卸掉它,桌宠一点变化都没有。

⚠️ 前提:大肥鱼的「显示位置」必须包含网页。 如果它是「仅桌面」模式,宠物跑在一个独立的 Electron 窗口里,网页这边根本拿不到它,本插件不会有任何效果。 解决办法:右键大肥鱼 → 显示位置 → 「仅浏览器」或「两者都显示」(改完立刻生效,不用刷新)。 另外,变身成网页里的那只之后,它只活在 DSH 窗口内,不再浮在桌面上——这是 dsh-pet 两种模式的固有区别。

效果

你的操作 鱼的反应
鼠标移到鱼的左边 / 右边 整条鱼绕 Y 轴转过去(带透视,不是平面翻转)
鼠标在鱼的上方 / 下方 抬头 / 低头,并朝光标方向轻微位移
鼠标静止 2.8 秒以上 进入「东张西望」:缓慢、不同步地左右看
拖动鱼 姿态立刻回正,松手后重新开始跟随
系统开启「减少动态效果」 自动关闭全部旋转,保持静止

跟随是带阻尼的:不是硬贴光标,而是每帧朝目标角度追一段,停下时有一点回弹的松弛感。

为什么是「整条鱼转」而不是「眼珠单独动」

dsh-pet 的角色素材是烘焙好的 webm 视频(assets/webm/*.webm),眼睛画在像素里,没有独立瞳孔图层可以单独位移。在不改它素材的前提下,能做到的最接近「看镜头」的效果就是真实的 3D 朝向变化:perspective + rotateY / rotateX 让整颗头朝光标转过去,再叠一点朝光标的位移制造视差。

如果你要的是瞳孔单独移动的 Live2D 式效果,那需要 dsh-pet 提供眼睛锚点或分层素材,属于另一件事,不在本插件范围内。

依赖

  • dsh-pet(必需):没有装桌宠时,本插件不报错,只是什么都不会发生。
  • DSH 的 Web 界面:网页版 dsh web 和官方桌面客户端的网页半区都能用(它的浏览器半边跑在页面里)。

安装

官方桌面客户端(desktop profile)

桌面端不要用 dsh plugin --profile web。在会话里让 DSH 用内置的 plugin_manager 装:

请用 plugin_manager 安装本地目录 <本仓库绝对路径>,装完告诉我结果以及是否需要重启。

或者直接从 GitHub 装:

请用 plugin_manager 安装 github:panchalkmetkh249-alt/dsh-bigfeiyu-focus。

Web(dsh web,web profile)

dsh plugin --profile web add github:panchalkmetkh249-alt/dsh-bigfeiyu-focus

本地目录安装(改代码即时生效):

dsh plugin --profile web add link:D:\你的路径\dsh-bigfeiyu-focus

装完通常会自动刷新一次页面(插件管理那边会弹刷新提示);没反应就 Ctrl+F5 硬刷新,还不行再重启宿主 / 完全退出桌面客户端重开。浏览器半边的代码随页面加载,只重启宿主不刷新页面是不会生效的。

卸载

dsh plugin --profile web remove dsh-bigfeiyu-focus

桌面端在插件管理里停用或移除本 bundle。卸载后不会在桌宠上留下任何残留(插件只往页面里追加过一条自己的 stylesheet,卸载时连它一起移除)。

原理

  • 宿主半边(index.js)是空实现,只负责让 bundle 行进配置树、把 client.js 注入页面。
  • 浏览器半边注册一个 shell.overlay 上的零尺寸桥接组件,挂载时启动全局引擎,卸载时完整回收。
  • 引擎不碰 dsh-pet 的 inline style:它只往 <head> 追加一条自己的样式,并给每个 .dsh-pet-root 写 4 个 CSS 自定义属性:
.dsh-pet-root {
  transform: perspective(880px)
    rotateX(var(--bfy-rx, 0deg))
    rotateY(var(--bfy-ry, 0deg))
    translate3d(var(--bfy-tx, 0px), var(--bfy-ty, 0px), 0);
  transform-origin: 50% 62%;
  will-change: transform;
}

为什么挂在根节点而不是视频上:dsh-pet 自己会每帧用 el.style.transform 给视频写 scaleX(-1)(镜像)和 scaleY(...)(按压 Q 弹),往视频上叠变换会和它打架;根节点上没有 transform,互不干扰。

  • 每帧只做一次 getBoundingClientRect() + 写 CSS 变量,不触发布局;document.hidden 时自动停算。

兼容性

  • 认的是 dsh-pet 的稳定类名:.dsh-pet-root、.dsh-pet-hit.dragging。
  • dsh-pet 大版本若改了 DOM 结构,跟随会静默失效(不会报错,也不会影响桌宠本身)。
  • 参数(最大偏航 9°、俯仰 6°、位移 4px、阻尼 0.16、闲置 2.8s)都写在 client.js 顶部常量里,想更含蓄或更夸张直接改。

开发

没有构建步骤,纯 ESM + 一段浏览器脚本:

dsh-bigfeiyu-focus/
├── package.json        # bundle 清单 + dsh.client(platform: web, immediately)
├── cordis.patch.yml    # 挂载一行
├── index.js            # 宿主半边(空实现)
├── client.js           # 浏览器半边:样式 + 引擎 + shell.overlay 桥接
├── icon.svg            # 插件管理页图标
└── locale/{zh,en}.json # 标题 / 描述

改 client.js 后硬刷新页面即可(宿主不需要重启);改 package.json / patch 需要重装或重启。

License

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit f9eb9856d14a

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout