docs: AnimationObjectController has no serialized fields — rebuilding it is a dead end

Asked whether the missing AnimationObjectController would be easy to implement, and the honest
answer was that nobody had dumped it. Dumping settles it: all 282 instances carry zero
serialized fields. It is pure behaviour.

So rebuilding its signature — the technique that paid off for BillboardController and
MirrorReflection — returns nothing here. It would take the missing-script count from 892 to 446
and yield not one bit of information. Which clip plays, whether it plays, and how fast all live
in the method body, and that is exactly what IL2CPP keeps from us. None of StageAnimationPlayer's
open timing questions can be closed this way; the direction is dead and is now marked as such so
the instance count does not tempt anyone back into it.

That also sharpens the triage rule added in the previous commit with a step zero: dump the
missing component's fields before deciding it is worth rebuilding. Instance count is not a proxy
for payoff — AnimationObjectController is the largest and worth nothing, while CustomLensFlare
carries a full field set and led to LensFlareData.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzXXkLzVC8pNA3JjyUGMbq
This commit is contained in:
ritenseki
2026-08-07 14:12:14 +08:00
parent 0ccf6b09f4
commit 966e566112
2 changed files with 8 additions and 2 deletions
+7 -1
View File
@@ -174,7 +174,7 @@ MonoBehaviour 实例脚本为空。**但这些脚本是可以「接管」的**
| namespace | 类 | live10149 实例数 | 状态 / 已 dump 到的字段 |
|---|---|---|---|
| `Gallop.Live` | `AnimationObjectController` | 282 | ❌(动画播放已由 `StageAnimationPlayer` 顶上,见下)|
| `Gallop.Live` | `AnimationObjectController` | 282 | ❌ **别建,建了也没用**:实测序列化字段 **一个都没有**(282 个实例全空)。重建只会让「脚本丢失」892→446,拿到 0 bit 新信息 —— 它是纯行为类,播哪个 clip / 何时播 / 多快全在拿不到的方法体里。动画播放已由 `StageAnimationPlayer` 顶上,见下 |
| `Gallop.Live` | `UnityLensFlareController` | 205 | ❌ 只有 1 个字段 `_enableAngleDegree`(0),本体不在这里 |
| `Gallop.Live` | `BillboardController` | 164 | ✅ 已建(字段已读到,朝向行为待定)|
| `Gallop.Live` | `WashLightController` | 27 | ❌ 24 个字段全是具体数值 + 两张投影贴图(`_projectionTexture`/`_cameraProjectionTexture`),缺的是 URP 下的投影实现 |
@@ -253,6 +253,12 @@ MonoBehaviour 实例是空的**(基线 892,已补 `BillboardController` −1
推论一:动手前先查一眼**这个物件挂过什么脚本、那个脚本我们有没有**
(`[StageScripts]` 日志 + `CLAUDE.md` 的签名清单),比直接怀疑解析快得多。
推论零:**先 dump 一眼那个缺失组件有没有字段,再决定值不值得重建。**
`AnimationObjectController` 实测**零字段**(282 个实例全空),所以重建它拿不到任何信息,
`StageAnimationPlayer` 那些时机问题不可能靠「把原类建出来」解决 —— 这个方向是死的,
别再试。反过来 `CustomLensFlare` 字段齐全(还牵出 `LensFlareData`),就非常值得建。
判断只要一条命令,不要凭实例数多就以为收益大。
推论二:**顶替缺失组件时,要把「我在替谁做决定」写清楚**,并且区分
「从 bundle 数据推出来的」和「看参考视频观察到的」—— 后者是有效证据,但不是 ground truth,
换个舞台可能就不成立(`StageAnimationPlayer.IsSweepRig` 的注释就是按这个写的)。
+1 -1
View File
@@ -108,7 +108,7 @@ Toon shader 已移植,卡住的主要是全屏后处理和几个逆向未完
|------|------|
| `Gallop.MirrorReflection` | ✅ 已建并实现。第二摄像机 + 反射矩阵 + 斜投影 → RT → `_ReflectionTex`。**顺带解决了长期的「舞台地板发白」** —— `mirror_a` 的 `_ReflectionTex` 从没被赋值,Unity 代入白贴图 × 默认 `_ReflectionRate = 1.0` |
| `Gallop.Live.BillboardController` | ⚠️ 已建,字段可读(`[StageScripts]` 丢失数 892→728)。朝向行为写过一版,实机是「一直转来转去而那东西不该转」,已默认关闭(`EnableRotation = false`)——`_rotationType` 语义和 up 轴取法都无依据。同批修掉一个确定 bug:目标摄像机被缓存,而生效摄像机随 CameraSwitcher 每帧变 |
| `Gallop.Live.AnimationObjectController` | ⚠️ **未建,282 个实例,是缺口最大的一个**。其最直接的后果(283 个 `Animation` 一个都不播)由 `StageAnimationPlayer` 顶上:按 `currentLiveTime` 采样而不是 `Animation.Play()`,暂停/拖动进度条都跟随。但**「播哪个 clip」和「该不该播」都是它在决定**,我们只能顶前者——wash 灯扫动 clip 被 free-run 就是栽在后者(已按 `_wash_` 跳过) |
| `Gallop.Live.AnimationObjectController` | ❌ **不要建**:实测**零序列化字段**(282 个实例全空),纯行为类,重建拿不到任何信息。其最直接的后果(283 个 `Animation` 一个都不播)由 `StageAnimationPlayer` 顶上:按 `currentLiveTime` 采样而不是 `Animation.Play()`,暂停/拖动进度条都跟随。但**「播哪个 clip」和「该不该播」都是它在决定**,我们只能顶前者——wash 灯扫动 clip 被 free-run 就是栽在后者(已按 `_wash_` 跳过) |
| `Gallop.RenderPipeline.CustomLensFlare` (+`LensFlareData`) | ❌ 未建,但**数据齐全、语义不受 IL2CPP 阻塞**——`LensFlareData` 是 Unity legacy Flare 的逐字翻版,URP 侧有 `LensFlareComponentSRP` 对应。199+5 个物件,星芒在原版截图里很显眼。**下一个该做的就是它** |
| `Gallop.RenderPipeline.MirrorBallProjector` | ❌ 字段已 dump,但 4 个 projector 全在原点、共用一个材质、没有任何指向灯球的引用字段——绑定关系只在方法体里。**卡住,不是没做** |
| `Gallop.Live.ShaderParam.ShaderParamController` | ⚠️ 实测是空操作(两个向量都是 (1,1,1,1)),从待办里划掉 |