Files
udxandClaude Opus 5.5 89e0fa246f Add formal enemies, remaining formal partners and synthesized UI SFX
- UI SFX v3: procedurally synthesized one-shots (Tools/synth_ui_sfx.py) wired to
  buttons, rewards, errors and red dots via UiSfx, gated by the SFX setting.
- Five formal enemies (Hornlet, Dashlet, Shellhorn, HornCaptain, GreatHorn):
  Hunyuan 50k -> 2000-tri XPbr, DGXA TokenRig, Idle/Walk/Attack, nested per type
  in PrototypeArena; PrototypeBattle.Enemy gains presentation-only Moving/Strikes.
- Formal partners for all ten pets in the arena and portraits, including new
  VineSprite, ThunderLeopard and TideWhale.
- Pipeline fixes: reject local TokenRig fallback, drop loose mesh islands,
  configurable Unity run_script timeout, companion static stage.
- Also includes concurrent work from another tool in this working tree
  (FlameLion, enemy combat FX, challenge mode, home explorer, server updates).
- Resources registered in Doc/ResDesc_*.md; verified on isolated :18081.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 12:23:55 +08:00

50 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 敌人攻击与受击特效/音效标准制作方案
2026-10-21。已接入当前 PrototypeArena;本批制作五类敌人的攻击表现,以及普通受击、硬甲受击、护盾格挡。五类敌人共用稳定的播放接口,资产和参数持久化在 Prefab 中。
## 资源与映射
| 类型 | 画面表现 | TangoFlux 音效 |
| --- | --- | --- |
| 0 · 小角怪(Hornlet) | 金色短弧/接触闪光 | Enemy_HornletAttack.wav · 0.48s |
| 1 · 疾跑怪(Dashlet) | 青白色狭长斜掠 | Enemy_DashletAttack.wav · 0.42s |
| 2 · 硬壳怪(Shellhorn) | 石甲冲击环/碎屑 | Enemy_ShellhornAttack.wav · 0.60s |
| 3 · 角怪队长(HornCaptain) | 橙红交叉双弧 | Enemy_HornCaptainAttack.wav · 0.58s |
| 4 · 大角首领(GreatHorn) | 大范围红金重击/贴地冲击环 | Enemy_GreatHornAttack.wav · 0.82s |
| 普通受击(敌人类型0/1,以及敌人击中伙伴) | 暖白闪光、短促碎光和小冲击环 | Enemy_HitSoft.wav · 0.34s |
| 硬甲受击(敌人类型2/3/4) | 金橙碎光、石甲冲击环 | Enemy_HitArmor.wav · 0.42s |
| 伙伴护盾完全吸收敌人攻击 | 青色闪光/格挡环 | Enemy_HitShield.wav · 0.55s |
特效根目录:`AIClient/Assets/Bundles/Effects/EnemyCombat/`。八个 `Vfx_Enemy_{名称}.prefab` 分别配套五种 Attack 与 HitSoft/HitArmor/HitShield。`CombatSoft.png` 为 Pipeline 制作的径向透明软粒子贴图;`CombatArc.asset`/`CombatRing.asset` 为弧带/环带网格;`CombatGlow.mat` 使用 `AIGame/EnemyCombatParticle` 加法透明着色器。
音效目录:`AIClient/Assets/Bundles/Sound/SFX/EnemyCombat/`。`EnemyCombatPresentation.prefab` 包含八类特效各四实例(共32),八条PCM音频及八个非循环AudioSource;已作为嵌套Prefab放入现有战场。通过战场资源依赖加载,无需另行动态查找特效地址。`BuildPrototype.MakeArena` 重建时会恢复该嵌套Prefab。
## 制作与运行标准
1. 先用固定英文声学描述、seed及请求内容哈希建立音效配方。`Tools/generate_enemy_sfx.py` 按 `D:/UD/AI/XModel/TangoFlux_AI调用指南.md` 检查服务ready;调用本机8012,最多两个并发任务;duration=2s、steps=50、guidance=4.5,异步提交和0.8秒轮询。队列满最多等待120秒,不停其它服务。缓存同时检查请求哈希与原稿哈希。
2. 保存服务job、提示词、原稿、参数与SHA256至 `Tools/output/enemy_combat_sfx/`,制作记录在 `Doc/Design/Sound/EnemyCombat/generation.json`。原稿保持44.1kHz立体声;后期做65Hz高通、最强起音截取、5ms淡入、50ms淡出和峰值约-1.94dBFS,输出0.34~0.82秒PCM16立体声短音效。连续试听为同目录 `preview.wav`,按上表五种攻击、普通受击、硬甲受击、格挡排列,每段间隔0.3秒。
3. Unity序列化资源、外部资源导入与导入设置全部经Pipeline。`BuildEnemyCombatFx.Build` 可重建材质、贴图、网格、八套特效及播放池,然后仅替换战场的反馈节点,保留其他战场内容。AudioClip采用PCM/DecompressOnLoad/预加载。
4. `PrototypeBattle` 在真实扣血和敌人出手处追加不可变 `CombatCue`;`PrototypeFlow` 在每次固定步长后消费队列。既有Pulse仍只用于缩放/状态提示,减速不冒充受击。死亡命中先记录再缩小角色;漏怪和无目标不创建命中。敌人出手弧光位于自身前方,目标命中反馈朝固定战斗相机方向偏移,避免被网格遮挡。
5. `EnemyCombatPresentation` 仅消费表现事实。五种敌人攻击各播放自身攻击效果和声音,并为伙伴播放普通受击或护盾格挡;敌人受击按类型选择软体或石甲。每类型4实例循环复用,声音8路轮转、同音75ms抑制、单音音量上限0.40,所有当前活动音源增益之和不超过0.70,防止多敌同时出手叠加失控。对象数与音源数固定。
6. 暂停冻结粒子和音源,恢复不重复发射;2倍速改变粒子速度,声音保留原音高。SFX开关关闭立即停战斗音,开启不会补播旧事件。离开战场时禁用反馈节点并停止/清空粒子与声音;新战斗清空旧表现。
7. 仍沿用当前 battleRules=1/2 的即时伤害时间。没有把扣血迁移到动画的 OnEnemyAttackImpact,也没有启用 SkillSystem 的 battleRules=3 前摇/投射物协议;正式技能时序迁移仍按 SkillSystem.md 进行。当前动画的蓄力和视觉冲击相位可能晚于即时命中,本次不改变战斗数值、节奏、服务端结算和奖励。
## 验证与复用
- `python Tools/verify_enemy_sfx.py`:八条音效的请求/原稿/输出哈希、成功任务、采样格式、短时长、前100ms起音、尾部淡出、零削波及有效电平通过。`audio_validation.json` 只声明自动检测,音色的主观听感需通过 `preview.wav` 试听,不将自动检查当成人工听审结论。
- Pipeline `BuildEnemyCombatFx.Verify`:八类映射、32实例、8音源、音频规格、非循环/无自动播放、着色器无编译错误、战场嵌套通过。
- Pipeline `VerifyEnemyCombatFx.Simulation`:两种规则×五类敌人,出手事件数与Strikes完全一致;有受击事件;完全护盾吸收;九个致命命中各一次;消费表现队列不影响战斗结果。报告 `simulation.json`。
- Pipeline `VerifyEnemyCombatFx.Play`:真实粒子和音源播放、五类攻击/受击/格挡、暂停恢复、2倍速、SFX静音、100次连续触发后的有界池、0.70总增益预算及退出清理通过。报告 `play.json`。
- Pipeline `VerifyEnemyCombatFx.PlayBattle`:用真实PrototypeFlow.Update/RefreshBattle驱动隔离内存战斗,五类敌人全部出手、九个敌人击败,事件消费与反馈通过;不登录测试账号、不请求奖励、不改玩家存档。报告 `battle.json`。
- `VerifyEnemyCombatFx.BuildReview` 生成独立 `Assets/Bundles/Scenes/Review/EnemyCombatFx_Review.unity`,`Capture` 在Additive场景采样后截图并关闭。截图 `Assets/Screenshots/enemy_combat_fx_review.png` 和 `enemy_combat_fx_battle.png`。没有覆盖角色总验收场景,原Boot和烈焰狮场景保持未修改。
Unity调用必须显式指定项目,例如:
```powershell
unity --json command --project-path D:/UD/AI/AIGame/AIClient set_autotick --enable true
unity --json command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/BuildEnemyCombatFx.cs --entry BuildEnemyCombatFx.Build
unity --json command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/VerifyEnemyCombatFx.cs --entry VerifyEnemyCombatFx.Simulation
```
本次验证为开发机Editor/Play,未做微信目标设备性能验收或Player资源包构建。TangoFlux指南注明模型权重为非商业研究用途;生成记录保留该来源信息,未认定音频已获得商用许可。