dsh-pet-live2d 2.2.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +90 -0
- package/README.md +30 -0
- package/lib/client.js +859 -39
- package/lib/index.js +99 -0
- package/package.json +1 -1
- package/pets/ds-whale-girl/pet.json +58 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,95 @@
|
|
|
1
1
|
# 更新日志
|
|
2
2
|
|
|
3
|
+
## 2.3.1
|
|
4
|
+
|
|
5
|
+
### 修:摸头会出摸尾巴的效果
|
|
6
|
+
|
|
7
|
+
用户报的:"现在摸头也是出现的摸尾巴的效果,而且这是 live2d 会动的,这个判断网格似乎是静态的。"
|
|
8
|
+
|
|
9
|
+
两个原因叠在一起:
|
|
10
|
+
|
|
11
|
+
1. **这只宠物的尾巴/翅膀是三选一的可选配件**(狐狸尾 / 猫尾 / 狼尾 / 天使翅膀…),
|
|
12
|
+
同一时刻只有一个显形,其余**几何还留在原地** → 判定区域会重叠。实测 1112 个头部
|
|
13
|
+
命中点里有 **697 个同时命中尾巴**。
|
|
14
|
+
2. 点击路由原来**先判尾巴、再判头** → 重叠区的点击一律算摸尾巴。
|
|
15
|
+
|
|
16
|
+
现在**摸头优先于摸尾巴**:点头部一定给摸头的台词/反应,只有"没命中头部"才看尾巴。
|
|
17
|
+
|
|
18
|
+
顺带把一条**太弱的测试**补强:原来只断言"存在只命中尾巴的点"(在 697 点重叠下依然是绿的),
|
|
19
|
+
现在断的是**路由**(点头部给的必须是摸头的台词)—— 这才是用户实际遇到的问题。
|
|
20
|
+
|
|
21
|
+
### 关于"判断网格似乎是静态的"
|
|
22
|
+
|
|
23
|
+
查证结果(都有读数支撑):
|
|
24
|
+
|
|
25
|
+
- **头部判定是跟着动的**:同一网格隔 2.5 秒重采,命中格子会变(模型呼吸/摆动)。
|
|
26
|
+
每次点击都是现读**当前帧**的顶点,不是缓存的网格。
|
|
27
|
+
- **尾巴/翅膀的几何在没戴配件时是退化的**(缩成一点 → 被面积下限排掉),所以
|
|
28
|
+
"摸尾巴"在没有尾巴的造型下**本来就该没反应**——你之前能看到反应,是模型当时正戴着
|
|
29
|
+
翅膀/尾巴。测试里现在有一条**一致性断言**把这件事写死:有几何就该有命中,
|
|
30
|
+
几何全退化就该一个都不中。
|
|
31
|
+
- 真正"静态"的是**点击穿透用的那层粗网格遮罩**(剪影),它按定时重建、粒度也粗 ——
|
|
32
|
+
它只决定"这一下算不算落在角色身上",不参与摸头/摸尾巴的判定。
|
|
33
|
+
|
|
34
|
+
> 试过用透明度过滤隐藏配件,结果**把真尾巴一起滤掉了**(`visibleDrawables: 4/11`):
|
|
35
|
+
> 隐藏是靠缩放、而 `opacities` 表在渲染期未必是最终值,拿它当闸门会误杀正在显形的那一个。
|
|
36
|
+
> 所以放弃了这条思路,改用"路由优先级"解决重叠 —— 保留的诊断读口
|
|
37
|
+
> `partsDebug()` / `partHitCounts()` 仍会报"过滤前 vs 过滤后",方便下次判断。
|
|
38
|
+
|
|
39
|
+
## 2.3.0
|
|
40
|
+
|
|
41
|
+
### 摸头判定改成按模型自己的几何(不再是手绘方框)
|
|
42
|
+
|
|
43
|
+
用户:"看看摸头的区域能否精准匹配头部的模型而不是手绘区域。" 查下来比想象的糟:
|
|
44
|
+
老实现用英文正则 `face|eye|mouth|nose|brow|cheek|head` 去猜哪些 drawable 是头,
|
|
45
|
+
而这只模型的 drawable 叫 `Part46` / `lianhong` / `Face_line` 这种 —— **一个都匹配不上**,
|
|
46
|
+
判定静默退化成"点哪都算头",摸哪都在撒娇。
|
|
47
|
+
|
|
48
|
+
现在的路是三段,全用模型自己的数据,没有猜的:
|
|
49
|
+
|
|
50
|
+
1. **cdi3 的部件名**:作者给每个部件起了中文名(`Part46` = 脸蛋、`Part57/58` = 眼睛、
|
|
51
|
+
`Part14` = 头发、`Part45/68` = 耳朵…),宿主按名字挑出头部部件(这只宠物 21 个);
|
|
52
|
+
2. **部件 → drawable**:cdi3 的 `Parts` 是**部件** id,而 `getDrawableIndex()` 认的是
|
|
53
|
+
**drawable** id —— 两个命名空间不同名(实测 21 个部件一个都解不出来)。引擎原始表里有
|
|
54
|
+
`drawables.parentPartIndices` + `parts.ids`,两边一接就得到 96 个头部 drawable;
|
|
55
|
+
3. **点在三角形内**:每次点击现读那批 drawable 的顶点与三角形索引(顶点是**当前帧变形
|
|
56
|
+
后**的,头歪着、身体摆着也准),先做包围盒排除再逐三角形判定。
|
|
57
|
+
|
|
58
|
+
同一个网格上,新判定和旧方框**有 325 个格子不同**:新的是圆顶、带耳朵尖、下巴收窄的
|
|
59
|
+
头部轮廓,旧的是个完美矩形。
|
|
60
|
+
|
|
61
|
+
> 踩到的坑:顶点在**包装层**(`internalModel.getDrawableVertices`),三角形索引在
|
|
62
|
+
> **core 层**(`internalModel.coreModel.getDrawableVertexIndices`)—— 只查一个就会
|
|
63
|
+
> 静默 null、悄悄退回方框。所以测试里每一段**单独断言**(部件数 / drawable 下标数 /
|
|
64
|
+
> 顶点可读 / 与旧规则不同 / 自身包围盒四角不全中),而不是只验最后那个 true/false。
|
|
65
|
+
|
|
66
|
+
### 新互动:摸尾巴、鼠标绕圈转晕
|
|
67
|
+
|
|
68
|
+
- **摸尾巴**:同一套几何判定,部件换成 cdi3 里命名为 尾/鳍/翅/翼 的那 15 个
|
|
69
|
+
(狐狸尾 / 猫尾 / 狼尾 / 大翅膀…都是可换配件)。默认反应:吐魂 / 问号。
|
|
70
|
+
- **转圈转晕**:鼠标绕着角色转够圈数(默认 2 圈 / 1.6 秒内)就演「晕晕」。看的是
|
|
71
|
+
**累计转角**而不是"位置绕了几圈" —— 前者对半径不敏感,贴着角色转小圈和远远转大圈都算。
|
|
72
|
+
- 三个互动(摸头 / 摸尾巴 / 转圈)各自可开关,反应候选在设置里点选,
|
|
73
|
+
候选就是**宠物自己的动作中文名与表情名**(不用记 id)。
|
|
74
|
+
|
|
75
|
+
### 气泡:会话相位会说一句话,而且全部可配
|
|
76
|
+
|
|
77
|
+
- 会话相位现在会弹一句台词(思考中 / 用工具 / 等你批准 / 等你回答 / 叫了帮手 / 消息排队 /
|
|
78
|
+
完成 / 出错),来源还是 DSH 的真实事件。
|
|
79
|
+
- **所有气泡文本都能在设置里改**(问候 / 点击 / 摸头 / 摸尾巴 / 转晕 / 归位 / 加载失败 +
|
|
80
|
+
每个相位)。一组用 `|` 分隔多个变体、随机挑一句;**留空 = 用宠物默认**
|
|
81
|
+
(`pet.json` 的 `live2d.lines`),所以"看一眼"不会把默认改掉。
|
|
82
|
+
- **位置可配**:左右 / 上下偏移两个滑杆,外加"一句话停留多久"。
|
|
83
|
+
- **总开关**:关掉之后任何台词都不弹。
|
|
84
|
+
|
|
85
|
+
### 顺手修掉两个潜伏的问题
|
|
86
|
+
|
|
87
|
+
- **退化三角形**:`pointInTriangle` 对三个顶点几乎重合(面积 0)的三角形会返回 true ——
|
|
88
|
+
而隐藏的配件(缩放成一点)正好是这种,会让"每个点都算命中"。已加面积下限。
|
|
89
|
+
- **转圈时间窗**:第一版写成 `now - 上次触发 > 窗口`,那个值一开始恒大于窗口,于是
|
|
90
|
+
每次移动都把累计清零,永远攒不够圈数(诊断读口里 `total` 一直停在 0.07)。
|
|
91
|
+
现在窗口从**这轮累计开始**算起。
|
|
92
|
+
|
|
3
93
|
## 2.2.0
|
|
4
94
|
|
|
5
95
|
### 多接三个会话状态(对着 DSH 0.1.7 的事件表挑的)
|
package/README.md
CHANGED
|
@@ -112,6 +112,36 @@ dsh plugin --profile web add "link:./dsh-pet-live2d/dsh-live2d-pet"
|
|
|
112
112
|
|
|
113
113
|
右键面板的「装扮」页签跟着相位走 —— 会话中它显示的是**相位抽到的**,不是你上次手选的。
|
|
114
114
|
|
|
115
|
+
### 互动:摸头 / 摸尾巴 / 转圈
|
|
116
|
+
|
|
117
|
+
点她身上会有反应,判定用的是**模型自己的几何**,不是画出来的区域:
|
|
118
|
+
|
|
119
|
+
| 互动 | 怎么触发 | 默认反应 |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| 摸头 | 点在**头部**(含头发、耳朵 —— 宿主读 cdi3 里作者的部件命名认出来的 21 个部件) | 重锤出击 / 问号 / 星星眼 随机一个,**不脸红** |
|
|
122
|
+
| 摸尾巴 | 点在**尾巴/翅膀**上(狐狸尾 / 猫尾 / 狼尾 / 大翅膀…15 个部件) | 吐魂 / 问号 随机一个 |
|
|
123
|
+
| 转圈转晕 | 鼠标**绕着角色转圈**:默认 2 圈、1.6 秒内 | 演「晕晕」 |
|
|
124
|
+
|
|
125
|
+
- 摸头/摸尾巴按**三角面**判定:圆顶带耳朵尖的头部轮廓、尾巴的边缘都对得上,不是方框。
|
|
126
|
+
顶点是**当前帧变形后**的,所以头歪着、身体摆着也准。
|
|
127
|
+
- **摸头优先于摸尾巴**:这两个区域可能有重叠(尾巴/翅膀挂件在身后,几何上会伸到头部
|
|
128
|
+
附近),重叠处算摸头。
|
|
129
|
+
- **尾巴/翅膀是可选配件**:没戴的时候它们的几何是退化的,"摸尾巴"就是没反应 ——
|
|
130
|
+
这是对的,不是坏了。戴上翅膀/尾巴(装扮槽)之后才摸得到。
|
|
131
|
+
- 转圈看的是**累计转角**(不是位置绕了几圈),所以贴着角色转小圈、远远转大圈都算。
|
|
132
|
+
- 三个互动各自可开关,反应也能改(见下)。共用的三句台词在「气泡」设置里。
|
|
133
|
+
|
|
134
|
+
### 气泡:说什么、在哪、要不要
|
|
135
|
+
|
|
136
|
+
她说话时会弹一个小气泡(问候、点击、摸头、摸尾巴、转晕、归位,以及**每个会话相位一句**:
|
|
137
|
+
思考中 / 用工具 / 等你批准 / 等你回答 / 叫了帮手 / 消息排队 / 完成 / 出错)。
|
|
138
|
+
|
|
139
|
+
- **所有文本都能改**:设置页「气泡」卡里逐条编辑。一组台词**用 `|` 分隔多个变体**
|
|
140
|
+
(随机挑一句);**留空 = 用宠物默认**(`pet.json` 的 `live2d.lines`),所以"看一眼"不会
|
|
141
|
+
把默认改掉。
|
|
142
|
+
- **位置可调**:左右 / 上下偏移两个滑杆(相对她头顶的默认位置),另有"一句话停留多久"。
|
|
143
|
+
- **总开关**:关掉之后任何台词都不弹。
|
|
144
|
+
|
|
115
145
|
### 关系:同时(pairs)与前提(requires)
|
|
116
146
|
|
|
117
147
|
条目下面缩进那一层是**关系**,两种刻意用不同前缀:
|