Ship the WeChat hot-update catalogs and the camp, TideWhale T2, UI atlas, and animation-lab work.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
After Width: | Height: | Size: 1.3 MiB |
@@ -0,0 +1,8 @@
|
||||
参考图只用来识别画风和主角身份:喷泉旁那个短发、额上戴着飞行护目镜的男孩探险家。不要复制广场、房屋、喷泉、猫咪或任何背景。
|
||||
|
||||
重新画成一张单独的全身角色设定图。约11岁男孩,柔和圆润的卡通游戏风格,头稍大,但肩膀、手臂、腿和手指都清楚分开,适合绑骨。严格正面T字站姿:双臂向左右水平伸直,手掌朝下,五指张开,双脚与肩同宽站稳,鞋底完整入画。短栗色头发,额前一小撮翘发;棕色飞行护目镜推到额头上,不遮住眼睛;奶油色短袖衬衫,贴身的棕色短探险背心,两个小口袋;棕色短裤;棕色短靴。双手空无一物,没有背包、帽子、武器、手杖和宠物。
|
||||
|
||||
纯白背景 #FFFFFF,四角都是纯白,不要地面、阴影、渐变、场景、文字、水印和边框。头顶和鞋底四周留白,全身完整。光线均匀,轮廓清晰,适合直接图生3D。
|
||||
|
||||
生成:Tools/gpt_image_generate.py,gpt-image-2.5,--quality high,--aspect-ratio 2:3,参考 Doc/Design/UI/Home/home_camp_with_cast.png。
|
||||
实测 1024×1536,四角 RGB ≥253。
|
||||
|
After Width: | Height: | Size: 58 KiB |
@@ -0,0 +1,39 @@
|
||||
# 潮汐鲸 T2 贝壳冠(2026-10-22)
|
||||
|
||||
**已完成并接入正式战场,伙伴T2挂件现为10/10。** 设计沿用已选1号 `tidewhale_t2.png`,潮汐鲸T1 Studio模型、22骨Avatar、控制器与Idle/Walk/Attack保持原样;贝壳冠绑定自身头部 `bone_4`。
|
||||
|
||||
## 制作与产物
|
||||
|
||||
| 阶段 | 实际结果 |
|
||||
| --- | --- |
|
||||
| 混元图生3D | 50,000三角面高模;任务 `4b87e19624de4c6c81d2e738b0820277`,源图与高模SHA256见 `production.json` |
|
||||
| 3D Studio初步低模 | 官网低细节/三角面拓扑任务;实际2,922面 |
|
||||
| 3D Studio UV | 将上步下载的同一低模交Studio展开UV,1,603顶点;两项worksId与taskId均已留档 |
|
||||
| 对齐与烘焙 | 对齐原高模,UV哈希前后一致;在Studio UV上烘焙512² diffuse/normal/AO/metallic/roughness |
|
||||
| 最终收尾 | 2,922超过400×1.3,执行保留UV减面至400面,不做本地初步拓扑或重新展开UV;转XPbr后FBX仍400面 |
|
||||
| Unity | Y-up、底面中点原点、局部-Z正面;静态Prefab高0.15m,512² base/mix、Test/XPbr材质;原T1 Variant挂件随头骨运动 |
|
||||
|
||||
正式路径:
|
||||
|
||||
- `AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhaleT2/`:`TideWhaleT2.fbx`、`TideWhaleT2_base.png`、`TideWhaleT2_mix.png`、`.mat`与静态`.prefab`。
|
||||
- 同角色根目录 `TideWhale_T2.prefab`:正式Studio T1的Variant,贝壳冠宽为头部锚区宽的0.55、底部嵌入四分之一冠高;顶点最高约0.611m(T1高0.55m)。
|
||||
- `PrototypeArena.prefab/ Heroes/Hero9/VisualT2`:默认隐藏,与Visual同缩放、第30层;运行时tier2显示T2并隐藏旧占位冠,tier1显示T1。
|
||||
- 中间产物与原始云端回执:`Tools/output/t2_3d/TideWhale/`、`Tools/output/t2_studio/TideWhale/`,不入正式包。
|
||||
|
||||
## 验证
|
||||
|
||||
- `unity_assets.json`:400面、完整UV、512²双贴图、XPbr、原Avatar/控制器/三动作、363个姿态采样中挂件局部变换不变,正式Hero9嵌套与图层通过。
|
||||
- `StaticReview/static_verification.txt`:导入后静态挂件高度0.149994m、底部-0.000002m,在既有2mm容差内,400面及XPbr通过;四向检查确认正面、底座贴合与纹理。
|
||||
- `Review/`、`ReviewWalk/`、`ReviewAttack/`:四向及原动作采样;[overview.png](overview.png)为六格总览,已检查冠的朝向、贴合与随动。低模存在预期的轮廓折面,三枚贝壳及前侧珍珠仍可辨认。
|
||||
- `unity_battle.json`与[battle.png](battle.png):真实PrototypeFlow消费第20关T2 f1权威轨迹的只读夹具,T1/T2切换、占位冠隐藏、有前摇普攻Attack、水罩、暂停、2倍速和缩放后SkillMuzzle通过;没有向真实账号发请求。护盾release==start,无前摇,按现有协议保持Idle;测试将护盾与普攻分开采样。
|
||||
- `BuildT2Visuals.VerifyComplete` 严格确认十套Variant及战场T2节点齐全;57项保护文件(潮汐鲸T1/Studio资源及原九套T2 Variant)SHA256保持不变,清单在 `production.json`。
|
||||
- 最终验证入口在进入Play及域重载后重新启用Pipeline后台tick;快进限制在协议2400tick内,跳过过期表现事件。临时夹具销毁并退出Play,保留原Boot场景、无未保存编辑;未构建Player、重启8080或发布。
|
||||
|
||||
## 复现入口
|
||||
|
||||
1. `D:/UD/AI/XModel/LLM3DGraphics/.venv/Scripts/python.exe Tools/studio_accessory_pipeline.py`:有高模与有效登录时恢复/执行Studio低模与UV、烘焙和XPbr打包。
|
||||
2. 用Pipeline导入三份源文件,运行 `SetupCharacter.Run("Animal/TideWhale", "TideWhaleT2", 0.15)`。
|
||||
3. `BuildT2Visuals.BuildTideWhale` → `ApplyTideWhale` → `VerifyComplete`;仅补潮汐鲸,不重建其他伙伴或整个战场。
|
||||
4. Edit:`VerifyTideWhaleT2.Assets`;Play:`VerifyTideWhaleT2.Battle`。每次进入Play后再次 `set_autotick --enable true`,完成后退出Play。
|
||||
|
||||
此前提交未成功与上传审批暂停属于历史;用户已直接授权本图及后续模型上传腾讯混元/Studio,本轮已完成全流程。微信真机性能仍未因本次编辑器验收而宣称通过。资源登记见ResDesc的Model/Picture/Animation/Config分册。
|
||||
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 181 KiB |
|
After Width: | Height: | Size: 172 KiB |
|
After Width: | Height: | Size: 184 KiB |
|
After Width: | Height: | Size: 163 KiB |
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 170 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 172 KiB |
|
After Width: | Height: | Size: 184 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 227 KiB |
|
After Width: | Height: | Size: 222 KiB |
|
After Width: | Height: | Size: 172 KiB |
@@ -0,0 +1 @@
|
||||
height=0.149994 bottom=-0.000002 triangles=400 XPbr=True; facing verified in front/side/back views
|
||||
|
After Width: | Height: | Size: 841 KiB |
|
After Width: | Height: | Size: 430 KiB |
@@ -0,0 +1,199 @@
|
||||
{
|
||||
"status": "validated",
|
||||
"date": "2026-10-22",
|
||||
"actor": "TideWhale",
|
||||
"highGenerationJob": "4b87e19624de4c6c81d2e738b0820277",
|
||||
"approvedImage": "Doc/Design/Character/TideWhale/T2/tidewhale_t2.png",
|
||||
"approvedImageSha256": "3f535260a97c42432d4fc0bd4fb27970bdb214f00ef5afc4ef331b96bb2f04d1",
|
||||
"high": "Tools/output/t2_3d/TideWhale/tidewhale_t2.glb",
|
||||
"highSha256": "2c569d0a583dd1c3f1830eef1b85cda8dbbe8ea0e3d0fce07aaaa1f9c92a9e10",
|
||||
"highTriangles": 50000,
|
||||
"studio": {
|
||||
"service": "Tencent Hunyuan 3D Studio",
|
||||
"lowpolyWorksId": "44e1b0dcf52449f092f727a06eca1023-0-ae5988f6-dadf-40d9-8506-91ab7ec7",
|
||||
"uvWorksId": "44e1b0dcf52449f092f727a06eca1023-0-6f2f78f2-f5ad-44ee-8cc9-c84b3a16",
|
||||
"lowpolyTaskId": "6781f357-cdbe-11f1-8aa1-32270ef011db",
|
||||
"uvTaskId": "42642541-2a43-4a16-abff-447ce1fcf540",
|
||||
"triangles": 2922,
|
||||
"vertices": 1603
|
||||
},
|
||||
"finalTriangles": 400,
|
||||
"textureSize": 512,
|
||||
"alignment": {
|
||||
"scale": 1.030863346483097,
|
||||
"highMin": [
|
||||
-0.5153369903564453,
|
||||
-0.2379390448331833,
|
||||
-2.0855718929624345e-08
|
||||
],
|
||||
"highMax": [
|
||||
0.512598991394043,
|
||||
0.2951090335845947,
|
||||
0.6040220856666565
|
||||
],
|
||||
"studioMin": [
|
||||
-0.5,
|
||||
-0.2597660720348358,
|
||||
-0.29296907782554626
|
||||
],
|
||||
"studioMax": [
|
||||
0.5,
|
||||
0.25976598262786865,
|
||||
0.2929690182209015
|
||||
],
|
||||
"matrix": [
|
||||
[
|
||||
1.0308634042739868,
|
||||
0.0,
|
||||
0.0,
|
||||
-0.0013689994812011719
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
1.0308634042739868,
|
||||
0.0,
|
||||
0.02858504094183445
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
1.0308634042739868,
|
||||
0.30201107263565063
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
]
|
||||
],
|
||||
"uvHashBefore": "a63077f2a978d91b0f04a4cd856771a7d029dd6ce632260995f7d202079c29c7",
|
||||
"uvHashAfter": "a63077f2a978d91b0f04a4cd856771a7d029dd6ce632260995f7d202079c29c7",
|
||||
"uvUnchanged": true
|
||||
},
|
||||
"decimation": {
|
||||
"triggered": true,
|
||||
"faces_before": 2922,
|
||||
"faces_after": 400,
|
||||
"target_faces": 400,
|
||||
"threshold_percent": 30,
|
||||
"uv_mode": "preserved_no_unwrap",
|
||||
"uv_layers_before": [
|
||||
"UVMap"
|
||||
],
|
||||
"uv_layers_after": [
|
||||
"UVMap"
|
||||
],
|
||||
"uv_bounds_before": [
|
||||
[
|
||||
0.004879831336438656,
|
||||
0.004880666732788086
|
||||
],
|
||||
[
|
||||
0.98685622215271,
|
||||
0.985864520072937
|
||||
]
|
||||
],
|
||||
"uv_bounds_after": [
|
||||
[
|
||||
0.004881010390818119,
|
||||
0.005294587928801775
|
||||
],
|
||||
[
|
||||
0.984697699546814,
|
||||
0.9849569201469421
|
||||
]
|
||||
],
|
||||
"materials_before": 1,
|
||||
"materials_after": 1,
|
||||
"ratio": 0.13689253935660506
|
||||
},
|
||||
"staticExport": {
|
||||
"uvHashBefore": "d1dbc1e81b1e5c211b802ab3b1d0949e5169e0edd5d866d35ed7904ec8bd9167",
|
||||
"uvHashAfter": "d1dbc1e81b1e5c211b802ab3b1d0949e5169e0edd5d866d35ed7904ec8bd9167",
|
||||
"uvPreserved": true,
|
||||
"vertices": 270,
|
||||
"triangles": 400
|
||||
},
|
||||
"coordinates": "FBX Y-up, bottom-centre origin, local -Z front",
|
||||
"bone": "bone_4",
|
||||
"preservedFileCount": 57,
|
||||
"originalsUnchanged": true,
|
||||
"preserved": {
|
||||
"AIClient/Assets/Bundles/Characters/Animal/RockBall/RockBall_T2.prefab": "4feafbe23505f955fa52be61ac7dd3b4e4cf8b7c24faa846eaa553b233fc7f9f",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/FireCat/FireCat_T2.prefab": "4734a5dd6b9779b5a410f2df6f2dfc281395dca8bf8141ddabaf92b053bc7786",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/BudBud/BudBud_T2.prefab": "4de6d2b356cb18c59d686dcb42c2e65e6f575ac916e399db2b49723230462a21",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/SparkBird/SparkBird_T2.prefab": "9ab0190029eda08e4da67f07ebddca01fa21945bf83caf55465087a4742df334",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/BubbleTurtle/BubbleTurtle_T2.prefab": "a5cadb29f4aa2ed91184676e359836a8d13e3d2ad61471aea150f8cf8220fbfe",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/RockRhino/RockRhino_T2.prefab": "eb4439ea10b5e84143080499d6571023a795f730d8daf1cf6f987597ee53a589",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/FlameLion/FlameLion_T2.prefab": "f75839c2c7367585322874bd67ba6810bdbf5f7b81ea61810480d688643e4c25",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/VineSprite/VineSprite_T2.prefab": "8124e3dc9f68285afa796394a1e2c7f4ef6b0c63a6c70025a290725e9d1bfc71",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/ThunderLeopard/ThunderLeopard_T2.prefab": "4525050dc014dd3cbf3b84c3e4ce25ffffa2fecabff90183105beaefc70cc17b",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Anims.meta": "3ffefdafb3b1621d796bcd67acac4ec4b454fbaa58d4dd823add9a92e5ec0873",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Clips.meta": "8a6d9b67b56762fbdcb4b2e7cab28354ada78a3bdfaa698a04c0f507021cfb3c",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Rigged.meta": "9b4b2dfb35f3ad0b40ae84e9c8981ebe7bc069a49d600978d3400c953dafad92",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale.fbx": "cc3ccd8175614e88bc2f908f103be9493cdc733f35c8cb4b112bc64dd2c5743c",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale.fbx.meta": "6b673a86754649423efea785a10e5c17a5796d2124ee45330ae17dda2594a59e",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale.mat": "845d0e54136161c63b9324886147b52c07c0f0bd5413921b7bca71ec0145c7f5",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale.mat.meta": "828ac69cf2c9d620a6ee0e3d42e7fd7ac96eca860c7580ef00dd67bca072a517",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale.prefab": "55b131b6f072ccda35bf360cb10c3e7440a45b4c0bc64f9d92bf7a357e981f9b",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale.prefab.meta": "383484bd86a1a15f8a3b4471ab3ec19dec1cfb199de23bae0d1aca3465d611b1",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale_Animator.controller": "5e4392d180d23007e5ddfec2fddd42b79ff6a7521f3aedc626e9f10d338773f0",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale_Animator.controller.meta": "aeb122fe8a2f832b29d1b5999b99b14f5c472838e8b5d5bf72cc2b1188f235ee",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale_base.png": "162b653fa46501c5dada27e90b063e3c49d4f7ab1d95d70a51a3134743f964fb",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale_base.png.meta": "b292d10130f0afd6a418805c6f4b334cb42b4010cebc715508602d9cdc04f248",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale_Companion.prefab": "31a78311da3256e6d2403d1e334604bde5d492cdeadaccc8ab16df476925b9b9",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale_Companion.prefab.meta": "80ab728693c68de32f2d776705766a182dbbbd82d35987edd820265073061549",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale_mix.png": "8f17f00d139d7d15e57e5dac3e7eced75023d70b2931f8e5376fd316a081bd2c",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale_mix.png.meta": "d893cbb0e37033530ea793afbe0c262457161d552a823428e1ed1553a3875403",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale_Rigged.prefab": "f361865a83654e7fbc473c4a94c25a078cc7b536a9f94695ddfaad5031ec702b",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale_Rigged.prefab.meta": "53855540b88015333a6e721d44b05f40ce3d6830034f14ad37a80dfb8fd936ec",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Anims/TideWhale_Attack.fbx": "047099a424bfe5b7caabf21b72a3417f9635cf67e91a7d0713c15480d55b1443",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Anims/TideWhale_Attack.fbx.meta": "9502091df7e0a3fcd78af4f28af467b1bf12fac8f6c29cead785bf588263ad05",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Anims/TideWhale_Idle.fbx": "1a83720f7467f6fa2179e9e2da01e650d919a368c60b8536edec26317d1f68e9",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Anims/TideWhale_Idle.fbx.meta": "b1faaa717cf042d5cfdcbd9f8f085360439f425b5eaf75ae1bf2bdd1c36abb51",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Anims/TideWhale_Walk.fbx": "a0b7eaca94ebed06e61fbb9202753e7d78b7ea59f320d236970118b4ea72add7",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Anims/TideWhale_Walk.fbx.meta": "dab10f557b5f81b7c665af8be239ab108a482d9cbb7826c976f3c192b59387d4",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Clips/Attack.anim": "5cfbc8167aeb43ddacdbc28765264a315df71369264aba555e257ab218651ec3",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Clips/Attack.anim.meta": "0f27f01d90ca2b9c44ef8879e0cf171cb280c409b81db8df3d1450131a016b1e",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Clips/Idle.anim": "1f685590d5c7b0ef0c4f621a1ad7d79c40b0cd80f704abf3a0d59a00dac7573a",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Clips/Idle.anim.meta": "38b425c33fa405195191af0706a87c963f34ee1faea4919a4355e1199db0d7b8",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Clips/Walk.anim": "77ee1c53b02bbcc276692f0a3f0cc9715bdefe297cbd470664ee98b9bc8f5b8a",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Clips/Walk.anim.meta": "7ad00fb6499ff6b5c127e3a6a9b7bbe36927dee87576d32abc7fdf29ea3d41d8",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Rigged/TideWhale_Rigged.fbx": "a3e9ebf536f8d80b040a77059ef42106711ee35795d6801f26e7c74204fef8be",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/Rigged/TideWhale_Rigged.fbx.meta": "cdc4e90c8b904a748e7303a047ca44697fad1fd688514d55e9d0d757655d6b55",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/Rigged.meta": "862cf0549356c2a372c9aff925d73aca9a6334f771f313f0ae6b438152973463",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/TideWhaleStudio.fbx": "e048f85e7b81544a5e6334e20dab5d42d53d63b447071abf4530781e4a803d71",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/TideWhaleStudio.fbx.meta": "2f4db10b304f562964fbf972efb0028c32bc364fcca2c82232a7a6799f882dd8",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/TideWhaleStudio.mat": "a3158fd306f18707c0a62fe0f706f23b168720db3db421b1c8e03237d3d8b9d6",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/TideWhaleStudio.mat.meta": "cf0c41d7a69786263d7abb23876f10b57ae6fc760fd1999e407fe42dda9d22ed",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/TideWhaleStudio.prefab": "9766dc15009d2204d007943925671cb3b683364267d4d916d16b24fe0965a5ba",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/TideWhaleStudio.prefab.meta": "6dc90d5b79e92952c57c3c4749413ffb27fdfde0a58d9449cad2cbd791548aa2",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/TideWhaleStudio_base.png": "5406f1212bcc8b8607e18678c6d66a19dbbfcec39cb6a95dc3aca3a7df273827",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/TideWhaleStudio_base.png.meta": "a35c35f7ccb553645dc7e4bff06e58f484afa6ddce13357266b3a3866897ce97",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/TideWhaleStudio_Companion.prefab": "64cb0617880f1ec10bea38004a1f33b6ed578bbd832db53e4eb5d97652a36777",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/TideWhaleStudio_Companion.prefab.meta": "dbb8b42a643efe4ad0b7ba53507f840cc433ac126f34421d24b33450e8ba717d",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/TideWhaleStudio_mix.png": "61e3cf4be3cac33ef09d38c0cbecf033b80144b4432f7240f731460b8adcd232",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/TideWhaleStudio_mix.png.meta": "aaee1848e2633a3e0c64b4cf939d2eca91434788a4f5c6e27d2e9739c5b9e595",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/Rigged/TideWhaleStudio_Rigged.fbx": "4539cfa787ba60d78c613d40000ab2178a3d538b81acf144c5744f3e9bcaf809",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhaleStudio/Rigged/TideWhaleStudio_Rigged.fbx.meta": "9235257b884540beafd1bcea23c5702609248dbcc11d9f51769abddf44a1202e"
|
||||
},
|
||||
"outputs": {
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhaleT2/TideWhaleT2.fbx": "0f0e4b85421edd1899484413a92340f77ce903e4da24d5ca8c3adf119b5cb450",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhaleT2/TideWhaleT2.fbx.meta": "79e187f932f40a914fadf7ad30cd16fa231452aecbf0c34d477e48fc4d5b39b6",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhaleT2/TideWhaleT2.mat": "1b1bd1fd7b1af47bb55c097127f92ebbecf47bafd88964949b3b50f565ff2450",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhaleT2/TideWhaleT2.mat.meta": "57ae39e8ccf95ebdd675f88b47693e8dd7fce688a340cee1b97ab81d613c0269",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhaleT2/TideWhaleT2.prefab": "596e990b5ed174ebc6298c6ef9e4a226e090fa8987d10fc22ce8f795a732e8c6",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhaleT2/TideWhaleT2.prefab.meta": "811bb55535d8cb9fd78b7eae3170cd35b15f828c99f1217db94ea0811abfee0a",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhaleT2/TideWhaleT2_base.png": "2623aaacfb24a394d26e882620b6f1e39c24629695296f84251b44828f433d9d",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhaleT2/TideWhaleT2_base.png.meta": "84b46284d7db6a628484dfd4403282050652db6ec8a68f0db72080b40e19ffa8",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhaleT2/TideWhaleT2_mix.png": "4d3a3509991d0c1c8250a1e398f5ac52c141ca1b84cfa4d2b329cc460a550fab",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhaleT2/TideWhaleT2_mix.png.meta": "75d80874b35904122021394cc4700a70b00bc2294a4c18487a99873d9b6d80eb",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale_T2.prefab": "9bccf14215a716fb1028eb9249fc6914e75e5f6a21373518ce209e35ffadd7c5",
|
||||
"AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhale_T2.prefab.meta": "cf3e862af7a036c5c47dfe1c03bca5b71399e50ea62e53b65a0a819033fa9222"
|
||||
},
|
||||
"unityAssets": "unity_assets.json",
|
||||
"unityBattle": "unity_battle.json",
|
||||
"networkAccountWrites": false,
|
||||
"playerBuilt": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"status": "pass",
|
||||
"triangles": 400,
|
||||
"uvVertices": 274,
|
||||
"textureSize": 512,
|
||||
"bone": "bone_4",
|
||||
"originalAvatar": true,
|
||||
"originalController": true,
|
||||
"originalThreeClips": true,
|
||||
"poseSamples": 363,
|
||||
"arenaHero": 9,
|
||||
"inactiveByDefault": true,
|
||||
"layer": 30
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"status": "pass",
|
||||
"authoritative": true,
|
||||
"stage": 20,
|
||||
"trace": "stage_20_t2_f1.json",
|
||||
"formation": [
|
||||
0,
|
||||
2,
|
||||
5,
|
||||
7,
|
||||
9,
|
||||
8
|
||||
],
|
||||
"t1T2Toggle": true,
|
||||
"placeholderHidden": true,
|
||||
"attack": true,
|
||||
"waterShield": 1,
|
||||
"pause": true,
|
||||
"doubleSpeed": true,
|
||||
"scaledMuzzle": true,
|
||||
"networkAccountWrites": false
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"status": "pass",
|
||||
"editor": {
|
||||
"status": "ready",
|
||||
"compiling": false,
|
||||
"domainReloadInProgress": false,
|
||||
"playMode": "stopped",
|
||||
"lastHeartbeat": "2026-10-22T02:27:07.2450338Z",
|
||||
"projectPath": "D:\\UD\\AI\\AIGame\\AIClient",
|
||||
"unityVersion": "2022.3.62f3"
|
||||
},
|
||||
"scenes": {
|
||||
"count": 1,
|
||||
"scenes": [
|
||||
{
|
||||
"name": "Boot",
|
||||
"path": "Assets/Scenes/Boot.unity",
|
||||
"isLoaded": true,
|
||||
"isDirty": false,
|
||||
"isActive": true,
|
||||
"rootCount": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
"consoleGroundTruth": {
|
||||
"sampledUtc": "2026-10-22T02:27:07.2450338Z",
|
||||
"ageMs": 163,
|
||||
"compilationFailed": false,
|
||||
"compiling": false,
|
||||
"consoleErrors": 0,
|
||||
"consoleWarnings": 0,
|
||||
"consoleLogs": 18,
|
||||
"seeded": true
|
||||
},
|
||||
"preservedFiles": 57,
|
||||
"originalsUnchanged": true,
|
||||
"playerBuilt": false,
|
||||
"networkAccountWrites": false
|
||||
}
|
||||
@@ -65,3 +65,8 @@ Unity Pipeline (Play): VerifyPartnerSkillFx.Behavior / ContactSheet
|
||||
Unity Pipeline (Play): VerifyBattleRuntime.VisualSkills
|
||||
Unity Pipeline (Stop): VerifyPartnerSkillFx.Finish / VerifyBattleRuntime.Assets
|
||||
```
|
||||
|
||||
|
||||
## 混音试听交付(2026-10-22)
|
||||
|
||||
已补齐5份技能/UI离线混音试听,涵盖菜单、9种技能单项、1×/2×第20关T2轨迹与密集叠加;保持正式增益、不限幅不归一化,所列样例零越界,最高4倍过采样峰值-3.47dBFS。具体文件、听审关注点及方法边界见 [MixReview/Production.md](../../Sound/MixReview/Production.md)。Unity实录尝试超时并已恢复干净Boot场景;产物不冒充实录,主观听感和微信设备验收仍待确认。正式技能单路仅0.0375,单音峰值约-30dBFS,已标记技能被敌人反馈遮蔽的听审关注点;未改变正式混音。
|
||||
|
||||
@@ -62,3 +62,8 @@ Unity Pipeline:`BuildBattleSkills.Build`(制作/挂点)、`VerifyBattleR
|
||||
|
||||
## 后续完成:伙伴专属技能表现(2026-10-21)
|
||||
上文记录的“专属特效/余四条音效待补”已完成:新增十种伙伴专属Prefab、四条TangoFlux音效,正式池现为15类/76根实例/8音源/9音效/10角色配置。治疗与减速也消费权威事件播放,真实轨迹23例、复用/去重/清理与正式战场截图通过。详见 `../PartnerSkills/Production.md`。微信真机性能、内存与主观混音仍待验收。
|
||||
|
||||
|
||||
## 技能/UI试听收尾(2026-10-22)
|
||||
|
||||
9/9声音与运行时契约复核通过。5份保持正式音量的离线混音试听及技术报告已交付,见 [MixReview/Production.md](../../Sound/MixReview/Production.md)。这是离线重建,不能替代实录、主观听审或微信真机验收;潮汐鲸T2外观已于本日获直接授权后完成Studio低模/UV及正式接入,见角色T2制作记录。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 火喵/岩团团技能闭环样例
|
||||
|
||||
2026-10-21完成独立样例。五敌人 Studio 模型已替换正式 PrototypeArena;本页的新技能逻辑则在独立验收场景运行。主线仍是 battleRules=2,未接 battle.begin/battle.events,未重启或部署开发服,未改变旧在途挑战、账号或奖励协议。
|
||||
2026-10-21完成独立样例。五敌人 Studio 模型已替换正式 PrototypeArena;本页的新技能逻辑则在独立验收场景运行。本页记录独立样例批次结束时的历史状态:当批主线为battleRules=2且未接网络轨迹;后续已完成正式权威协议与9/9技能声音,最新状态见 `../Runtime/Production.md` 与 `../PartnerSkills/Production.md`。
|
||||
|
||||
## 已完成
|
||||
|
||||
@@ -32,7 +32,7 @@ Unity经Pipeline依次运行 `BuildSkillSlice.Build`、`VerifySkillSlice.Assets`
|
||||
|
||||
## 后续接入边界
|
||||
|
||||
完整25技能、治疗/减速、多路波次、trace分页和网络协议兼容仍待实现;不能把独立样例视为 battleRules=3 主线迁移完成。下一阶段将该内核接入服务端授权战斗与冻结配置,客户端加载权威轨迹,覆盖10伙伴/20关平衡及旧挑战恢复后再切换规则。当前计划音效清单为5/9已生成,Heal/Slow/Lightning/EnemyHit仍待制作。TangoFlux权重依项目指南为非商业研究用途,保留许可核查边界,未宣称商用放行。
|
||||
当批尚未完成25技能、治疗/减速、多路波次、trace分页和协议兼容,声音为5/9;后续已完成上述权威协议及10伙伴/20关运行时接入、9/9声音,不再列作当前待办。样例本身仍只是独立验收证据,正式规则与兼容边界见下节。TangoFlux权重依项目指南为非商业研究用途,保留许可核查边界,未宣称商用放行。
|
||||
|
||||
|
||||
## 权威技能协议与正式战场接入(2026-10-21)
|
||||
|
||||
@@ -202,16 +202,16 @@ proposal文件显式 `runtimeEnabled=false`,现有CMake和客户端加载器
|
||||
|
||||
表现测试至少覆盖:动画丢标记仍只发一次、动画播放速度、粒子挂点与世界空间、音频延迟/静音/抢占、异步资源过期返回、对象池Trail清空、暂停恢复、后台恢复时跳过过期声音、BattleEnded彻底清理。最终在竖屏实际战斗相机与微信目标设备测资源加载、活跃音源、粒子透明叠加及帧耗;开发机截图通过不等同实机性能通过。
|
||||
|
||||
配置校验命令:`python Tools/validate_skill_design.py`。测试命令:`python -m unittest discover -s Tools/tests -p test_skill_design.py`。报告位于 `Tools/output/skill_system_design/validation.json`,状态design_contract_validated仅表示设计配置通过,runtimeIntegrated和generatedAudio仍为false。
|
||||
配置校验命令:`python Tools/validate_skill_design.py`。测试命令:`python -m unittest discover -s Tools/tests -p test_skill_design.py`。报告位于 `Tools/output/skill_system_design/validation.json`,该proposal报告的design_contract_validated仅表示历史设计契约通过;其中runtimeIntegrated/generatedAudio=false不代表正式运行时未接通。正式状态使用 `Tools/validate_skill_runtime.py`(runtimeIntegrated=true、generatedAudio=true、9/9声音)。
|
||||
|
||||
## 已落地的敌人表现批次(2026-10-21)
|
||||
|
||||
五类敌人的攻击与普通/硬甲/护盾受击表现已作为现有battleRules=1/2的适配层接入。实际完成8套特效、8条TangoFlux短音效、32实例/8音源播放池;真实PrototypeFlow隔离战斗及暂停/倍速/静音通过。完整制作记录见 [EnemyCombatFx/Production.md](EnemyCombatFx/Production.md)。此前BattleSkills的9条计划音效清单仍保持原计划状态,不能与本批8条敌人音效混算;battleRules=3技能逻辑内核、动作冲击相位与伤害同步、伙伴元素技能仍按上文阶段实施。
|
||||
五类敌人的攻击与普通/硬甲/护盾受击表现已作为现有battleRules=1/2的适配层接入。实际完成8套特效、8条TangoFlux短音效、32实例/8音源播放池;真实PrototypeFlow隔离战斗及暂停/倍速/静音通过。完整制作记录见 [EnemyCombatFx/Production.md](EnemyCombatFx/Production.md)。当批BattleSkills另有9条计划声音,不与本批8条敌人声音混算;后续已完成battleRules=3权威技能运行时、十伙伴表现和9/9技能声音,见本页末正式接入记录。
|
||||
|
||||
|
||||
## 五敌人战场替换与技能闭环样例(2026-10-21)
|
||||
|
||||
火喵与岩团团已完成独立 C++ 事件轨迹→Unity 时钟/动作/5类特效/5条TangoFlux音效的可运行样例,详见 [SkillSlice/Production.md](SkillSlice/Production.md)。这一步未接主线 battle.begin/events,未切换 battleRules=3;原25技能的全关迁移仍待完成。计划音效清单现为5/9已生成、4/9待制作;正式主线与独立样例状态分别记录。
|
||||
火喵与岩团团已完成独立 C++ 事件轨迹→Unity 时钟/动作/5类特效/5条TangoFlux音效的可运行样例,详见 [SkillSlice/Production.md](SkillSlice/Production.md)。当批独立样例尚未接主线;后续已完成battle.begin/events协议、25技能全关迁移和9/9音效,下节记录正式状态。
|
||||
|
||||
|
||||
## 权威技能协议与正式战场接入(2026-10-21)
|
||||
|
||||
@@ -1,6 +1,16 @@
|
||||
# G0 玩法原型实现记录
|
||||
|
||||
更新日期:2026-10-20。对应 [GameDesign.md](../../GameDesign.md) 的 G0 阶段,用于验证核心循环与操作手感,不等同于完整 P0 或正式服经济系统。
|
||||
更新日期:2026-10-22。本页按时间保留G0→G3实施历史;下列日期章节中的“当前/仍待”仅指该批次结束时,不应直接当作最新待办。不等同于完整P0或正式服经济系统。
|
||||
|
||||
## 当前状态(2026-10-22)
|
||||
|
||||
- 内容已扩至10伙伴/20主线关/三路线六槽;伙伴与五类敌人已采用正式模型,战场已替换为正式美术。伙伴Studio采用情况见 [CompanionStudioBatch.md](Character/CompanionStudioBatch.md)。
|
||||
- 正式权威战斗已接通25技能、20主线关和5属性挑战;新客户端使用combatProtocol1/快照rulesVersion3,旧客户端与旧在途战斗保留兼容路径。见 [Runtime/Production.md](Combat/Runtime/Production.md)。
|
||||
- 十伙伴专属VFX与9/9技能声音已入库并接入;UI采用v3合成音效且已接入。五份混音试听及技术检查已补齐,属于离线重建,主观听审与微信真机性能仍待验收。见 [MixReview/Production.md](Sound/MixReview/Production.md)。
|
||||
- T2挂件已完成10/10:用户直接授权后,潮汐鲸完成混元高模→3D Studio初步低模/UV→512²烘焙→保留UV收尾400面→头骨挂件与Hero9接入。三动作随动、T1/T2切换及第20关权威战斗暂停/双速通过。见 [TideWhale/T2/Production.md](Character/TideWhale/T2/Production.md)。
|
||||
- 首日新账号仅用三只T1教学伙伴走通1-1~1-5;更广的经济/微信设备验收未据此宣称完成。未构建Player或发布生产服。
|
||||
|
||||
## G0历史快照(以下保留原实现记录)
|
||||
|
||||
## 已实现
|
||||
|
||||
@@ -276,7 +286,7 @@ UI按双列/双行重排:伙伴、捕捉、背包材料、营地休息区为2
|
||||
|
||||
验证:原生4335项断言通过,覆盖10/20配置校验、schema8→9迁移、十伙伴捕捉池与保底、20关顺序解锁与推荐等级通关、六处首通掉落、16并发与日志故障回滚;HTTP隔离进程24并发弹珠/邮件/宝箱重试、重启回执与账户隔离通过。C++/Unity对照227组一致(120胜/107负),包含十伙伴技能与20关矩阵;十六个Prefab字体/九宫格通过。实际EventSystem点击走通两章标签切换、十伙伴/捕捉/宝箱列表与首页入口,检查截图`roster_*.png`。真实开发账号与备份比对仅schema/revision变化,钱包80金币/40糖果/48弹珠、等级与操作日志不变;8080开发服已重建并迁移,未构建Player或部署生产服。
|
||||
|
||||
仍待完成:设置面板的音效资源、T2正式外观、正式战场、G3真机性能与微信验收。
|
||||
本批次结束时遗留设置音效、T2外观、正式战场及G3真机/微信验收;后续已完成UI声音、正式战场和9/10 T2挂件,最新缺口见页首。
|
||||
|
||||
### 主界面音乐选用与接入(2026-10-20)
|
||||
|
||||
@@ -342,21 +352,21 @@ UI 音效换成 v2 一次性短音效(0.12~0.8 秒)并接入运行时。`U
|
||||
|
||||
好友页在双方已是好友、并且自己通过 1-1 之后,可以对这位好友寻宝。每天 3 次,同一位好友每天一次。服务器按自己的通关数从活动池发奖:1 关 10 金币,4 关 20 金币,10 关 30 金币和 5 糖果。客户端不能指定抽到哪一件。奖励不加给对方,也不减少对方的金币、弹珠或装饰。同一请求重放不重复入账。进行中的战斗也可以寻宝。存档从 schema 13 迁到 14 时只补 0 次,不发奖励。突袭仍会播放战斗,这次没做。服务端 `game_tests` 5192 项断言通过,覆盖未结交、未通关、伪造事件、战斗进行中发奖、对方营地不变、重放、同一营地当天一次、每日 3 次、次日恢复、10 关分档和空迁移。8080 已在 2026-10-21 20:38 重启,重启前备份为 `AIServer/data/aiserver-before-schema14-20261021-203836.db` 及其 wal、shm。未向真实账号发送请求;玩家下次进入时迁到 schema 14,只补 0 次寻宝。未改伙伴模型和战场。
|
||||
|
||||
- 2026-10-21 伙伴 T2 进化外观:T1 模型+骨骼挂件(9/10,潮汐鲸待混元额度),战斗按 tier 切换 Visual/VisualT2;隔离 18081 全 T2 阵容 1-5 实战通过。
|
||||
- 2026-10-21 伙伴 T2 进化外观:T1模型+骨骼挂件完成9/10,潮汐鲸当批提交未成功;2026-10-22用户直接授权后已补齐潮汐鲸Studio低模/UV挂件,全量10/10完成,状态见页首。战斗按tier切换Visual/VisualT2;此前隔离18081全T2阵容1-5实战通过不代表潮汐鲸挂件已完成。
|
||||
|
||||
|
||||
## 五敌人战场替换与技能闭环样例(2026-10-21)
|
||||
|
||||
五类敌人的 Studio 低模已替换正式战场,原Avatar/控制器/三动作不变;45个模型引用、尺寸/贴地和五类型 Walk/Attack、攻击受击反馈通过。保留现有伙伴及T2,不重建整体战场。
|
||||
|
||||
火喵/岩团团独立技能样例实现 C++ 50ms整数tick逻辑、动作通道和阶段、投射物到达伤害、护盾及特效音效播放。C++30项检查、Unity1×/2×/暂停/低帧率最终状态一致、静音和清理通过;生成5条TangoFlux音效。生产服务器和主线仍旧规则,未进行网络轨迹协议接入或20关规则迁移。记录 `Doc/Design/Combat/SkillSlice/Production.md`。
|
||||
火喵/岩团团独立技能样例实现C++ 50ms整数tick逻辑、动作通道和阶段、投射物到达伤害、护盾及特效音效播放。C++30项检查、Unity1×/2×/暂停/低帧率最终状态一致、静音和清理通过;当批生成5条TangoFlux音效。当时尚未接主线网络协议,后续已完成下节权威协议与20关迁移、9/9声音,不再列为当前未完成项。记录 `Doc/Design/Combat/SkillSlice/Production.md`。
|
||||
|
||||
|
||||
## 权威技能协议与正式战场接入(2026-10-21)
|
||||
|
||||
新客户端battle.begin/challenge.begin声明combatProtocol1,服务端冻结25技能与配置、结果和事件,分页只读获取。PrototypeBattle.Trace仅应用权威事件,统一动作/特效/音效及数据时钟;旧客户端与旧战斗仍走原规则。正式战场持久化技能池和19个可调挂点,T2缩放同步。
|
||||
|
||||
120组C++关卡/进化/阵容矩阵覆盖25技能;23份跨关轨迹在C#最终状态与统计一致;18083真实UI全T2的1-5经服务重启恢复相同场次,实播/结算通过。8080开发服已更新,旧程序与SQLite一致性备份保留,全部game_states核对不变。制作记录 `Doc/Design/Combat/Runtime/Production.md`。未发布Player或生产服,真机性能与完整伙伴专属音效特效仍待完成。
|
||||
120组C++关卡/进化/阵容矩阵覆盖25技能;23份跨关轨迹在C#最终状态与统计一致;18083真实UI全T2的1-5经服务重启恢复相同场次,实播/结算通过。8080开发服已更新,旧程序与SQLite一致性备份保留,全部game_states核对不变。制作记录 `Doc/Design/Combat/Runtime/Production.md`。后续已补齐十伙伴专属特效与9/9声音;未发布Player或生产服,真机性能与主观混音听审仍待验收。
|
||||
|
||||
|
||||
### 2026-10-21:伙伴技能表现补齐
|
||||
@@ -365,3 +375,8 @@ UI 音效换成 v2 一次性短音效(0.12~0.8 秒)并接入运行时。`U
|
||||
### 2026-10-21:最新技能规则的首日前五关验收
|
||||
|
||||
隔离新账号只用初始岩团团/火喵及教学芽芽,正常两次发射、训练至Lv.5、领取基础补给和推荐布阵,真实UI走通1-1~1-5,全程T1,无资源或通关状态预置。五份权威轨迹哈希、结果、奖励、统计和最终钱包与C++事务路径一致;重打1-5不重复发奖。最终金币720/糖果110/弹珠62。修复训练资源不足时仍要求直接训练的引导及隐藏敌人Animator逐帧警告,专项UI/实战通过。新增首日CTest,四组服务端回归通过。结果与边界见 [G3/FirstFiveAcceptance.md](G3/FirstFiveAcceptance.md)。真实账号恢复,18085测试服关闭,Boot无脏状态;未构建Player或重启8080,真机性能仍待测。
|
||||
|
||||
|
||||
### 2026-10-22:收尾复核与过期描述清理
|
||||
|
||||
复核25技能正式契约和9/9音效来源/成品哈希,通过。补齐5份技能/UI离线混音试听及零削波检查,记录正式技能单路偏低的听审关注点;没有把技术检查算作主观听审。旧文档中的“仅计划/5条声音/未接正式协议/芽芽旧草稿待验收”已更新或标明历史边界。潮汐鲸T2在用户直接授权后已完成高模、Studio初步低模/UV、400面512²挂件及正式Hero9接入,全量10/10;新回执见角色T2制作记录。Unity音频实录尝试超时后恢复为唯一Boot、非Play且无脏内容;当前音乐/音效均开启,原音效开关值未能在中断后重新核验。未构建Player、重启8080或发布生产服。
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
# HomeCamp 主界面营地场景
|
||||
|
||||
## 范围与视觉基准
|
||||
|
||||
2026-10-23,用户确认按当前主界面背景还原近景广场、房屋和喷泉。视觉基准为 `AIClient/Assets/Bundles/UI/Bg/home_camp.png`,保留奶油墙、橙红屋瓦、黄白遮阳棚、浅色石路、蓝色喷泉和前景草地。沿用竖屏 1080×1920 的固定机位。
|
||||
|
||||
湖泊、瀑布、远山与城堡使用独立远景图片面片,不生成复杂远景模型。首版交付独立可编辑场景;首页 HUD 接入另行验收,保留现有首页。
|
||||
|
||||
分件图由内置 imagegen 参考当前背景生成,完整提示词见 `design_prompts.json`。主屋、侧屋、喷泉和地表均为白底独立分件;`backdrop.png` 是实际远景贴图,按用途全幅绘制景色,不是白底图生模型输入。
|
||||
|
||||
## 近景组件清单
|
||||
|
||||
| ID | 设计图 | 最终三角面 | 贴图 | 场景用途 |
|
||||
| --- | --- | ---: | --- | --- |
|
||||
| ground | `ground.png` | 8303 | 1024² XPbr | 五步产物保留供审核,表面质量不通过,未摆入交付场景 |
|
||||
| mainhouse | `mainhouse.png` | 1981 | 1024² XPbr | 中后方主屋;两侧缩小复用,三实例 |
|
||||
| cottage | `cottage.png` | 2995 | 1024² XPbr | 五步产物保留供审核,表面质量不通过,未摆入交付场景 |
|
||||
| fountain | `fountain.png` | 1795 | 1024² XPbr | 中央圆池与两层小碗喷泉 |
|
||||
|
||||
连续地表为五步流程后的编辑收尾资产 `GroundSurface.asset/.prefab`:Unity Pipeline 创建持久化的 2 三角面顶面和非凸 MeshCollider,覆盖 36×42m;`ground_surface.png` 是内置 imagegen 另绘的正俯视地表颜色贴图,提示词见 `ground_surface_prompt.txt`。它不是 Studio 地表 UV 的延续,未把失败的 Studio 地表称作通过验收。
|
||||
|
||||
路灯和长椅通过隔离四向检查后复用 TownSquare 资产。两套旧树木/灌木均有烘焙黑斑,未用于交付;树木与花边改为 `tree_card.png` / `flower_card.png` 透明图片面片,Unlit AlphaClip、无碰撞和投影,提示词见 `foliage_prompts.json`。首版不含告示牌、拱门和围栏。
|
||||
|
||||
## 用户指定的五步模型流程
|
||||
|
||||
1. **混元网页生成高模**:每张白底分件图生成一份 50k GLB,保留任务号、日志、原始高模与哈希。
|
||||
2. **3D Studio · 低模生成**:输入同一分件的高模,使用官网 Studio 低模功能,记录低模任务号和实际三角面数。
|
||||
3. **3D Studio · UV 展开**:对上一步 Studio 低模展开 UV,记录 UV 任务号并校验输出。不得用 Blender 自动 UV 替代此步骤。
|
||||
4. **Blender · 贴图烘焙**:先将 Studio 居中/归一化后的低模对齐到其确切来源高模,保留 Studio UV,烘焙颜色、法线、AO、金属度、粗糙度,再打包 XPbr base/mix。
|
||||
5. **超出目标 30% · Blender 保留 UV 减面**:仅当实际三角面数严格大于目标×1.30 时触发,减至目标附近;未超过阈值则明确登记为跳过。保留现有 UV 和已烘焙贴图,不重新展开 UV。
|
||||
|
||||
所有模型完成上述流程后统一导出 Y-up、底面中心原点、局部 -Z 正面的 FBX。在 Unity 四向检查正面;不能用运行时旋转修补源模型坐标。地表另验水平顶面、厚度和可行走区域,防止生成竖直薄板后未经检查直接摆入场景。
|
||||
|
||||
复用依据:`Tools/studio_accessory_pipeline.py` 与 `Tools/campguide_studio_mesh.py` 已有第 02~05 步实现;`Tools/studio_lowpoly_trial.py` 含同源对齐、Studio UV 与 30% 阈值逻辑。它们目前分别面向挂件和角色,后续应提取静态场景入口,不能直接把 HomeCamp 当角色或 T2 挂件发布。
|
||||
|
||||
## 初始布局(模型验收后微调)
|
||||
|
||||
坐标为 Unity 世界坐标,单位米;相机从 -Z 看向 +Z,建筑正面局部 -Z 朝向广场。物件实际 Y 由地表碰撞向下投射确定,清单 Y=0 只是布局参考。
|
||||
|
||||
| 对象 | 初始 X/Z | 尺寸参考 | 朝向 |
|
||||
| --- | --- | --- | --- |
|
||||
| Ground | 0 / 0 | 连续 36×42m,前侧为 -Z 草地 | 地表顶面朝 +Y |
|
||||
| MainHouse | 0 / 7.2 | 高约 6.5m | 门朝广场中央 |
|
||||
| HouseLeft | -7.5 / 4 | 主屋缩小至高约 4m | 门朝中央略内转 |
|
||||
| HouseRight | 7.5 / 4 | 同一主屋 Prefab 复用 | 门朝中央略内转 |
|
||||
| Fountain | 0 / 0.8 | 池直径约 4.5m、高约 2.3m | 旋转对称 |
|
||||
| Bench / Lamps / Trees | 广场边缘 | 复用既有组件 | 避让门口和中央活动区 |
|
||||
|
||||
相机初始位置 `(0, 15, -27)`,看向 `(0, 1.8, 3)`,透视 FOV 48°。最终以 1080×1920 对照背景调构图,保证中央喷泉、后方主屋、左右侧屋和前景草地可辨识;长屏额外检查上下裁切。
|
||||
|
||||
## 远景面片
|
||||
|
||||
`backdrop.png` 已绘制独立湖泊/瀑布/城堡远景,禁止把整张含广场背景直接贴在后面造成重复房屋和喷泉。
|
||||
|
||||
通过 Unity Pipeline 创建并保存 Quad + Unlit 材质,放在近景后方,调整面片位置、尺寸与 UV,使竖屏视锥内右侧城堡和瀑布均可见;不把横图直接居中裁掉右侧地标。不加碰撞、不投影、不受近景灯光二次照明。用两侧树冠及后排屋顶遮住底部衔接边,保持相机固定;首版不增加天空盒和复杂视差层。
|
||||
|
||||
## Unity 交付与验收
|
||||
|
||||
- 资产计划目录:`AIClient/Assets/Bundles/Scenes/Town/HomeCamp/`。
|
||||
- 中间件:`Tools/output/homecamp_3d/`、`Tools/output/homecamp_studio/`。
|
||||
- 目标:组件 Prefab、`HomeCamp.prefab`、独立 `HomeCamp.unity` 及竖屏验收截图。
|
||||
- 所有导入、材质、碰撞体、Prefab 和场景制作走 Unity Pipeline,不直接改 `.meta/.unity/.prefab/.mat`。
|
||||
- 地表使用非凸 MeshCollider,验证贴地、门口可达、模型穿插和喷泉池遮挡。
|
||||
- 场景和面片在编辑器持久化,不用运行时代码临时拼业务场景。
|
||||
- 图片登记到 `Doc/ResDesc_Picture.md`;模型实际产出后再登记 Model,不能提前声称模型完成。
|
||||
|
||||
## 当前状态
|
||||
|
||||
用户已明确回复“确认授权上传”,授权向 `https://3d.hunyuan.tencent.com/` 上传四张近景分件图及其衍生模型,执行网页高模、Studio 低模与 UV 处理。此前的审批拦截已因新增明确授权解除。
|
||||
|
||||
四个 50k 档高模及 Studio 低模/UV、Blender 烘焙、条件减面均已执行;任务号、哈希、实际面数和逐步回执记录到 `homecamp_scene_manifest.json` 及各组件 `production.json`。
|
||||
|
||||
Studio GLB 在法线和 UV 接缝处拆分顶点,直接减面会删除碎片。新增 `bl_decimate_homecamp_uv.py` 先焊接重合几何顶点、校验逐面 UV 仍保留,再减面;`bl_repair_homecamp_surface.py` 统一面朝向,不生成新 UV。最后对保留 UV 的最终低模补同源投射烘焙。主屋/喷泉最终 1981/1795 面;侧屋预算从1800改为3000,最终2995;地表保留8303面并以6500预算的130%容差跳过减面。旧预算尝试回执保留,不能把它们当最终通过结果。
|
||||
|
||||
侧屋和 Studio 地表仍有表面瑕疵,**仅保存制作/审核资产,没有摆入交付场景**。交付场景采用通过外观检查的主屋三实例和喷泉,地表用连续顶面编辑收尾。`Test/HomeCampXPbr` 是项目 XPbr 的独立双面版本,仅供 HomeCamp 材质使用,未修改原 XPbr Shader。
|
||||
|
||||
场景静态入口为 `Tools/homecamp_model_pipeline.py --part <ground|mainhouse|cottage|fountain>`,使用 `D:/UD/AI/XModel/LLM3DGraphics/.venv/Scripts/python.exe` 运行。每件资产的五步回执位于 `Tools/output/homecamp_studio/<part>/production.json`;重复执行校验来源与配置并复用已完成阶段。
|
||||
|
||||
Unity 入口为 `AIClient/AgentScripts/BuildHomeCamp.cs`:`BuildAssets` 导入和制作组件,`CaptureParts` 四向验收,`Build` 持久化拼装并渲染两种竖屏尺寸,`Verify` 验证面数、XPbr、地表碰撞与无碰撞的 Unlit 远景。通过 Pipeline 的 `run_script` 执行,构建用 Additive 临时场景并恢复原场景;初始 `Boot.unity` 没有未保存编辑。
|
||||
|
||||
## 首版交付与验证结果
|
||||
|
||||
- 场景:`AIClient/Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.unity`。
|
||||
- 总 Prefab:同目录 `HomeCamp.prefab`;31处布局记录见 `Tools/output/homecamp_review/assembly.txt`。
|
||||
- 标准竖屏与长屏截图:`Tools/output/homecamp_review/homecamp_portrait.png` / `homecamp_tall.png`。
|
||||
- 验证:`Tools/output/homecamp_review/verification.txt`,实际拼装 **9987 三角面**,连续地表 **25/25** 射线采样通过,远景 Unlit、无碰撞、不投影;独立场景未加入 Build Settings。
|
||||
- Pipeline 制作脚本编译无诊断;基于本轮起始 cursor=382 查询 Console,未新增 error。Boot 场景仍为 `dirty=False`。
|
||||
- 当前交付是固定相机静态场景,尚未替换首页背景或接入角色行走;未构建或发布 Art/Player,未做真机性能验收。长屏会裁掉部分边缘房屋/远景,正式首页接入时仍需按机型调整相机。
|
||||
|
After Width: | Height: | Size: 2.0 MiB |
|
After Width: | Height: | Size: 1.5 MiB |
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"generator": "built_in_imagegen",
|
||||
"referenceImage": "AIClient/Assets/Bundles/UI/Bg/home_camp.png",
|
||||
"transparentBackground": false,
|
||||
"assets": [
|
||||
{
|
||||
"id": "mainhouse",
|
||||
"output": "Doc/Design/Scene/HomeCamp/mainhouse.png",
|
||||
"prompt": "Use case: stylized-concept. Create ONE isolated 3D game asset design, the CENTRAL LARGE HOUSE from this reference village, for image-to-3D modeling. Match the house silhouette and style: warm cream stucco walls, orange terracotta rounded roof tiles, two story central gable, a single cream chimney on left roof, small round attic vent, arched upper window with wooden flower box, large arched wooden front door with a pale stone arch surround, modest low one-story roof extensions to either side, small wall-mounted golden lanterns. Show full building from slightly above front in a 3/4 view, centered with generous white margin; architectural back/side mass must be coherent. Keep the central house visually recognizable from the reference. Pure #FFFFFF background, no ground, no pedestal, no village, no fountain, no trees, no detached flowerpots, no people, no animals, no labels or text, no cast shadow on background. A single connected house, pleasantly rounded hand-painted Candy game look, detailed enough for texture baking but clear simple forms. Square image."
|
||||
},
|
||||
{
|
||||
"id": "fountain",
|
||||
"output": "Doc/Design/Scene/HomeCamp/fountain.png",
|
||||
"prompt": "Use case: stylized-concept. Make a single isolated image-to-3D game asset design of the round stone fountain in the reference image. Preserve the reference fountain: wide low circular basin of warm pale cream cut stone blocks, turquoise blue water visible within, one tapering carved central pedestal with two small tiered bowls and a very modest water spout at the top. NOT a giant three tier wedding cake fountain. Small village fountain, broad basin and short central tiers. Slightly elevated 3/4 front view showing the entire circular footprint. Cheerful rounded Candy game art matching the reference, high quality softly lit textured 3D render. Exactly one fountain on a pure white #FFFFFF background. No surrounding flower ring, no flowers, no paving, no ground, no floor or separate pedestal, no houses, no trees, no people, no text. Fountain stone and blue water only; compact continuous shape suitable for image-to-3D."
|
||||
},
|
||||
{
|
||||
"id": "cottage",
|
||||
"output": "Doc/Design/Scene/HomeCamp/cottage.png",
|
||||
"prompt": "Use case: stylized-concept. Create exactly ONE isolated small market cottage game asset design matching the side cottages in this village reference. One story warm creamy plaster cottage, compact rectangular plan, orange terracotta gabled roof with round tiles, small cream chimney, a round attic vent, arched small window and wooden entrance door. In front attached to the facade is a charming yellow and white striped canvas awning supported by two wooden posts over ONE compact wooden fruit counter with a few oranges and baskets. Simple readable continuous building, preserve the warm cream / orange / golden yellow palette and rounded hand-painted Candy game style of the reference. Full cottage visible from slightly above in 3/4 front view, centered with white space. Pure white #FFFFFF background, no terrain, no village, no additional houses, no ground tile or pedestal, no fountain, no detached props, no people or animals, no words or watermarks, no cast shadow on the white backdrop. For image-to-3D modeling, clear silhouette and full roof."
|
||||
},
|
||||
{
|
||||
"id": "ground",
|
||||
"output": "Doc/Design/Scene/HomeCamp/ground.png",
|
||||
"prompt": "Use case: stylized-concept. Create exactly ONE isolated 3D terrain ground asset for the foreground village square in the reference. ONLY ground, no objects. A broad shallow nearly flat irregular rounded-rectangle patch: rear two thirds warm cream irregular flagstone plaza, front third lush soft green grass. A gently curving cream stepping-stone path enters from the FRONT RIGHT and widens into the central plaza. Leave the center as uninterrupted paving where a separate fountain will be placed later. Leave the rear edge as clear flat paving where separate buildings will stand. No fountain socket or holes. Slight raised stone edging only at the perimeter, very thin natural soil sidewall. Mostly flat, suitable walkable game terrain; miniature landscape floor, not a floating island. Slightly elevated nearly top-down view showing the whole footprint and shallow thickness. Match bright soft Candy game art and warm colors in reference. Pure white #FFFFFF background with generous margin. No houses, no buildings, no fountain, no trees, no bushes, no flowers, no furniture, no lamps, no walls, no arches, no fences, no mountains, no sky, no water, no text. The ground only, one continuous mesh."
|
||||
},
|
||||
{
|
||||
"id": "backdrop",
|
||||
"output": "Doc/Design/Scene/HomeCamp/backdrop.png",
|
||||
"prompt": "Use case: stylized-concept. Asset type: full-bleed distant background texture for a simple flat polygon behind a 3D village, NOT an isolated model design. Extract and extend ONLY the DISTANT SCENERY seen at the TOP of the reference: clear pale blue sky, soft fluffy white clouds, distant blue layered mountains, a blue lake, rocky green cliffs at middle right with a broad white waterfall falling into the lake, a tiny warm cream and red-roof fantasy castle far away on the upper RIGHT ridge, scattered slim cypress trees and rounded green distant woodland along the lakeside. Preserve the cheerful soft painted Candy village world, warm sunny midday, serene airy atmosphere. Wide landscape composition, coherent natural perspective. Upper 45 percent sky and clouds, middle mountains and castle ridge, lower 35 percent lake and distant woodland/cliffs. Fill entire rectangular image edge to edge, no white margins. NO foreground village, no nearby houses, no fountain, no plaza, no paving, no bench, no market stalls, no characters, no pets, no interface, no text. This image will be an unlit distant backdrop, so all requested lake/waterfall/castle detail must be IN THE IMAGE, not separate meshes. Landscape 3:2 aspect ratio."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
{
|
||||
"status": "design_images_verified",
|
||||
"imageCount": 5,
|
||||
"rows": [
|
||||
{
|
||||
"id": "mainhouse",
|
||||
"path": "Doc/Design/Scene/HomeCamp/mainhouse.png",
|
||||
"width": 1254,
|
||||
"height": 1254,
|
||||
"sha256": "1b1fcb750f72464910aa053f8084829f861a853e1e5cccecc8f494479f2876bd",
|
||||
"corners": [
|
||||
[
|
||||
253,
|
||||
253,
|
||||
253
|
||||
],
|
||||
[
|
||||
255,
|
||||
255,
|
||||
255
|
||||
],
|
||||
[
|
||||
254,
|
||||
254,
|
||||
254
|
||||
],
|
||||
[
|
||||
253,
|
||||
253,
|
||||
253
|
||||
]
|
||||
],
|
||||
"imageDecodes": true,
|
||||
"whiteCornersPass": true
|
||||
},
|
||||
{
|
||||
"id": "cottage",
|
||||
"path": "Doc/Design/Scene/HomeCamp/cottage.png",
|
||||
"width": 1312,
|
||||
"height": 1199,
|
||||
"sha256": "7d290546cbf0e797c02261226fbcbbb4f8919b34e32fb15e5dae6e4c80e2a1ff",
|
||||
"corners": [
|
||||
[
|
||||
253,
|
||||
253,
|
||||
253
|
||||
],
|
||||
[
|
||||
254,
|
||||
254,
|
||||
254
|
||||
],
|
||||
[
|
||||
254,
|
||||
254,
|
||||
254
|
||||
],
|
||||
[
|
||||
254,
|
||||
253,
|
||||
254
|
||||
]
|
||||
],
|
||||
"imageDecodes": true,
|
||||
"whiteCornersPass": true
|
||||
},
|
||||
{
|
||||
"id": "fountain",
|
||||
"path": "Doc/Design/Scene/HomeCamp/fountain.png",
|
||||
"width": 1402,
|
||||
"height": 1122,
|
||||
"sha256": "2ca038060220c0fb0c35ffd5bda0e87e0fe249c4b074faac4123b520f9bdfd39",
|
||||
"corners": [
|
||||
[
|
||||
253,
|
||||
253,
|
||||
253
|
||||
],
|
||||
[
|
||||
255,
|
||||
255,
|
||||
255
|
||||
],
|
||||
[
|
||||
254,
|
||||
254,
|
||||
254
|
||||
],
|
||||
[
|
||||
254,
|
||||
253,
|
||||
254
|
||||
]
|
||||
],
|
||||
"imageDecodes": true,
|
||||
"whiteCornersPass": true
|
||||
},
|
||||
{
|
||||
"id": "ground",
|
||||
"path": "Doc/Design/Scene/HomeCamp/ground.png",
|
||||
"width": 1536,
|
||||
"height": 1024,
|
||||
"sha256": "c129ff8fe81928e77b834e5603f845329e9a4c3da9018bda9ab217e0aac76291",
|
||||
"corners": [
|
||||
[
|
||||
253,
|
||||
253,
|
||||
253
|
||||
],
|
||||
[
|
||||
254,
|
||||
255,
|
||||
255
|
||||
],
|
||||
[
|
||||
254,
|
||||
254,
|
||||
254
|
||||
],
|
||||
[
|
||||
253,
|
||||
253,
|
||||
253
|
||||
]
|
||||
],
|
||||
"imageDecodes": true,
|
||||
"whiteCornersPass": true
|
||||
},
|
||||
{
|
||||
"id": "backdrop",
|
||||
"path": "Doc/Design/Scene/HomeCamp/backdrop.png",
|
||||
"width": 1536,
|
||||
"height": 1024,
|
||||
"sha256": "e854738987f2b384359317d8713ff4bbdf3d27960abe75661727516198f4ccf5",
|
||||
"corners": [
|
||||
[
|
||||
86,
|
||||
173,
|
||||
249
|
||||
],
|
||||
[
|
||||
105,
|
||||
187,
|
||||
248
|
||||
],
|
||||
[
|
||||
104,
|
||||
132,
|
||||
49
|
||||
],
|
||||
[
|
||||
70,
|
||||
101,
|
||||
35
|
||||
]
|
||||
],
|
||||
"imageDecodes": true
|
||||
}
|
||||
],
|
||||
"modelGenerationCompleted": false,
|
||||
"unitySceneCreated": false
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.8 MiB |
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"generator": "built_in_imagegen",
|
||||
"referenceImage": "AIClient/Assets/Bundles/UI/Bg/home_camp.png",
|
||||
"transparentBackground": true,
|
||||
"assets": [
|
||||
{
|
||||
"id": "tree_card",
|
||||
"output": "Doc/Design/Scene/HomeCamp/tree_card.png",
|
||||
"prompt": "Use case: stylized-concept. Asset type: transparent background tree cutout for a distant vegetation billboard behind a 3D village. Recreate ONE beautiful leafy village tree matching the large broadleaf tree in the reference: dense lush rounded sunlit green canopy in about five overlapping soft masses, rich small leaf detail, a sturdy warm brown branching trunk. Entire tree including trunk base fits inside the image with clear margin. Upright frontal view, slightly visible canopy top. Soft cheerful Candy game 3D painted look, sunny daytime. Isolate ONLY the tree on a genuinely transparent background. No soil mound, no planter, no base platform, no grass, no buildings, no other objects, no text, no dark holes or black patches. Solid dense foliage with natural transparent silhouette edge. This tree image is a flat distant decoration, not input for model generation."
|
||||
},
|
||||
{
|
||||
"id": "flower_card",
|
||||
"output": "Doc/Design/Scene/HomeCamp/flower_card.png",
|
||||
"prompt": "Use case: stylized-concept. Asset type: transparent flower-border cutout for a fixed-camera mobile game foliage card. ONE compact low rounded flower clump matching the daisies and yellow flowers bordering the fountain in the village reference. Dense soft lush green leaves supporting many cheerful small white daisies with golden centers and a few tiny bright yellow flowers. Show the full clump silhouette, no cropping; broad low mound, three-quarter frontal view from slightly above. Warm sunny soft painted Candy game 3D illustration, beautiful dense foliage, clean natural details. Isolate this one clump on a genuinely transparent background, generous clear margin. No planter, no wooden box, no vase, no rocks, no soil platform, no lawn tile, no cast shadow backdrop, no people, no text. No black holes or dark patches. A flat scene decoration, not an input for 3D model generation."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 2.0 MiB |
|
After Width: | Height: | Size: 2.8 MiB |
@@ -0,0 +1,5 @@
|
||||
Generator: built_in_imagegen
|
||||
Reference: AIClient/Assets/Bundles/UI/Bg/home_camp.png
|
||||
Transparent background: false
|
||||
|
||||
Use case: stylized-concept. Asset type: orthographic straight-down albedo texture for a flat mobile game village ground, 1024x1024 square. Fill EVERY pixel edge to edge with terrain; no sky, no white background, no outside border. Camera exactly vertical looking straight down, absolutely no perspective or isometric angle, no visible thickness. Rear/top 65% of the square is warm pale cream irregular flat flagstone paving with narrow soft moss-filled joints, softly rounded stones, no deep gaps or dark cracks. Front/bottom 35% is cheerful soft green grass. A path of broad cream stepping stones enters from the BOTTOM RIGHT and curves smoothly into the central paved plaza. Center is continuous unobstructed paving where a separate fountain will stand. Match the warm cream paving and lush green grass palette from the village reference but use softly painted diffuse colors, no baked directional shadows and no glows. Fine small natural grass flecks and a few tiny white daisy specks at the grass edges. No houses, no fountain, no trees, no furniture, no people, no text, no grid, no dark contours, no raised slabs or spikes. Flat coherent terrain texture. Square.
|
||||
@@ -0,0 +1,518 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"sceneId": "HomeCamp",
|
||||
"referenceImage": "AIClient/Assets/Bundles/UI/Bg/home_camp.png",
|
||||
"designPrompts": "Doc/Design/Scene/HomeCamp/design_prompts.json",
|
||||
"designResolution": [
|
||||
1080,
|
||||
1920
|
||||
],
|
||||
"status": "independent_scene_first_version_validated",
|
||||
"modelPipeline": {
|
||||
"steps": [
|
||||
"hunyuan_web_highpoly",
|
||||
"studio_lowpoly",
|
||||
"studio_uv",
|
||||
"blender_bake",
|
||||
"blender_decimate_preserve_uv_if_over_130_percent"
|
||||
],
|
||||
"highpolyFaces": "50k",
|
||||
"textureSize": 1024,
|
||||
"decimationThresholdPercent": 30,
|
||||
"decimationComparison": "actualTriangles * 10 > targetTriangles * 13",
|
||||
"preserveStudioUV": true,
|
||||
"coordinateSystem": {
|
||||
"up": "+Y",
|
||||
"front": "-Z",
|
||||
"origin": "bottom_center"
|
||||
}
|
||||
},
|
||||
"components": [
|
||||
{
|
||||
"id": "ground",
|
||||
"designImage": "Doc/Design/Scene/HomeCamp/ground.png",
|
||||
"targetTriangles": 6500,
|
||||
"modelStatus": "processed_review_candidate_not_placed",
|
||||
"groundCollider": "non_convex_mesh",
|
||||
"position": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"highpoly": "Tools/output/homecamp_3d/ground/ground.glb",
|
||||
"highpolySha256": "0710157abc6d07cd0dea8c5d413321a65be4689ca29cff4190cf879652705e20",
|
||||
"highpolyTriangles": 50000,
|
||||
"highpolyBounds": [
|
||||
[
|
||||
-0.5104680061340332,
|
||||
0.0,
|
||||
-0.44764000177383423
|
||||
],
|
||||
[
|
||||
0.4677639901638031,
|
||||
0.030424000695347786,
|
||||
0.529000997543335
|
||||
]
|
||||
],
|
||||
"highpolyJobId": "7d51d34ba0514601aed6085afc664152",
|
||||
"highpolyCreationId": "ef5a58d3-f03f-4c70-8208-ed8604212404",
|
||||
"highpolyWorkDir": "Tools/data/hunyuan/jobs/7d51d34ba0514601aed6085afc664152",
|
||||
"initialTargetTriangles": 1500,
|
||||
"budgetRevisionReason": "Studio terrain has many UV boundaries; retain its 8303-face topology within 130 percent rather than delete surface patches",
|
||||
"finalTriangles": 8303,
|
||||
"productionReceipt": "Tools/output/homecamp_studio/ground/production.json",
|
||||
"studioLowpolyTask": "44e1b0dcf52449f092f727a06eca1023-0-6174151d-6124-4f72-9881-065b2876",
|
||||
"studioUVTask": "44e1b0dcf52449f092f727a06eca1023-0-2ed2b6e8-1a43-45a0-8493-d480c889",
|
||||
"steps": {
|
||||
"01": "highpoly_validated",
|
||||
"02": "studio_lowpoly_completed",
|
||||
"03": "studio_uv_completed",
|
||||
"04": "blender_bake_completed_on_studio_uv",
|
||||
"05": "skipped_within_130_percent"
|
||||
},
|
||||
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/ground/ground.prefab",
|
||||
"sourceOutputs": {
|
||||
"Tools/output/homecamp_studio/ground/xpbr/ground.fbx": "638cbfbc82ee23dbc1f24f4c322db4655365ba6d60c6914fe869d9418d24277d",
|
||||
"Tools/output/homecamp_studio/ground/xpbr/ground_base.png": "fdaa5959e53e59ec6cf5a57a7311414c83f94fec1e52b308decd47aae46ccc38",
|
||||
"Tools/output/homecamp_studio/ground/xpbr/ground_mix.png": "879b155f4e521d6c6bbf6fb029c4db1832028f37cdf7ab89661dcd95ce945db4"
|
||||
},
|
||||
"visualIssue": "Studio surface/UV fragmentation; retained for further repair, excluded from delivered assembly"
|
||||
},
|
||||
{
|
||||
"id": "mainhouse",
|
||||
"designImage": "Doc/Design/Scene/HomeCamp/mainhouse.png",
|
||||
"targetTriangles": 2000,
|
||||
"modelStatus": "visually_validated_and_placed",
|
||||
"position": [
|
||||
0,
|
||||
0,
|
||||
8
|
||||
],
|
||||
"highpoly": "Tools/output/homecamp_3d/mainhouse/mainhouse.glb",
|
||||
"highpolySha256": "0419b5c94f4526693e4af0ec731382d53cb9dfc25019f5c5b3d0f9195a510695",
|
||||
"highpolyTriangles": 49760,
|
||||
"highpolyBounds": [
|
||||
[
|
||||
-0.42348501086235046,
|
||||
0.0,
|
||||
-0.3207170069217682
|
||||
],
|
||||
[
|
||||
0.48123401403427124,
|
||||
0.678384006023407,
|
||||
0.25547000765800476
|
||||
]
|
||||
],
|
||||
"highpolyJobId": "eb4fcd58e81e4c38b5136ed5df63a2d2",
|
||||
"highpolyCreationId": "6431481a-85da-42e2-a310-e6ba10e6a2ae",
|
||||
"highpolyWorkDir": "Tools/data/hunyuan/jobs/eb4fcd58e81e4c38b5136ed5df63a2d2",
|
||||
"finalTriangles": 1981,
|
||||
"productionReceipt": "Tools/output/homecamp_studio/mainhouse/production.json",
|
||||
"studioLowpolyTask": "44e1b0dcf52449f092f727a06eca1023-0-6a3c03b4-6dee-413d-a162-d4d9e22d",
|
||||
"studioUVTask": "44e1b0dcf52449f092f727a06eca1023-0-88f7a9a0-3c61-4cbc-9f84-1372a63a",
|
||||
"steps": {
|
||||
"01": "highpoly_validated",
|
||||
"02": "studio_lowpoly_completed",
|
||||
"03": "studio_uv_completed",
|
||||
"04": "blender_bake_completed_on_studio_uv",
|
||||
"05": "uv_preserving_decimation_completed"
|
||||
},
|
||||
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/mainhouse/mainhouse.prefab",
|
||||
"sourceOutputs": {
|
||||
"Tools/output/homecamp_studio/mainhouse/xpbr/mainhouse.fbx": "5095a00531dd167e02d4e138a0c319db8f00826d35a77f4d9371b1b8711e6166",
|
||||
"Tools/output/homecamp_studio/mainhouse/xpbr/mainhouse_base.png": "da7a51a03481a37725e43fdfd7e224a41c9b2014deb90ca42ae15893dc36035a",
|
||||
"Tools/output/homecamp_studio/mainhouse/xpbr/mainhouse_mix.png": "bef58c63f6e51b7ce8f992ef56bdc2a906c0da273f4bac1964e9da1232d3461c"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "cottage",
|
||||
"designImage": "Doc/Design/Scene/HomeCamp/cottage.png",
|
||||
"targetTriangles": 3000,
|
||||
"modelStatus": "processed_review_candidate_not_placed",
|
||||
"instances": [
|
||||
{
|
||||
"name": "CottageLeft",
|
||||
"position": [
|
||||
-7,
|
||||
0,
|
||||
4.5
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "CottageRight",
|
||||
"position": [
|
||||
7,
|
||||
0,
|
||||
4.5
|
||||
]
|
||||
}
|
||||
],
|
||||
"highpoly": "Tools/output/homecamp_3d/cottage/cottage.glb",
|
||||
"highpolySha256": "af146d667230ed4aa34ce0bf839fa9025e1c2e36f03a425c82d592b5a7c9dd88",
|
||||
"highpolyTriangles": 49990,
|
||||
"highpolyBounds": [
|
||||
[
|
||||
-0.4400230050086975,
|
||||
0.0,
|
||||
-0.37127700448036194
|
||||
],
|
||||
[
|
||||
0.4304420053958893,
|
||||
0.7349910140037537,
|
||||
0.33599400520324707
|
||||
]
|
||||
],
|
||||
"highpolyJobId": "6338023c4d4b4233976babd1198d0c49",
|
||||
"highpolyCreationId": "8420a93b-f3de-4746-97c4-2e15b17c5f1c",
|
||||
"highpolyWorkDir": "Tools/data/hunyuan/jobs/6338023c4d4b4233976babd1198d0c49",
|
||||
"initialTargetTriangles": 1800,
|
||||
"budgetRevisionReason": "Retain continuous ground/house surface and Studio UV charts; initial lower budget caused missing patches",
|
||||
"finalTriangles": 2995,
|
||||
"productionReceipt": "Tools/output/homecamp_studio/cottage/production.json",
|
||||
"studioLowpolyTask": "44e1b0dcf52449f092f727a06eca1023-0-61d9ba22-da64-4adb-b440-11b8a08a",
|
||||
"studioUVTask": "44e1b0dcf52449f092f727a06eca1023-0-b33f6718-07fb-42c7-981d-3a7512a0",
|
||||
"steps": {
|
||||
"01": "highpoly_validated",
|
||||
"02": "studio_lowpoly_completed",
|
||||
"03": "studio_uv_completed",
|
||||
"04": "blender_bake_completed_on_studio_uv",
|
||||
"05": "uv_preserving_decimation_completed"
|
||||
},
|
||||
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/cottage/cottage.prefab",
|
||||
"sourceOutputs": {
|
||||
"Tools/output/homecamp_studio/cottage/xpbr/cottage.fbx": "0cd83d07210db2b8ff9fe9ce949f769409ddd02321da4d4730337c758e56a2cf",
|
||||
"Tools/output/homecamp_studio/cottage/xpbr/cottage_base.png": "db7ac208bfeaa514384e94af1bec41579de370ace66dcc4c181e865a2381279b",
|
||||
"Tools/output/homecamp_studio/cottage/xpbr/cottage_mix.png": "4d6c3ac43a6d84cf33686dab41ab53da5df6f6753bbc3f1dee70e32313190d70"
|
||||
},
|
||||
"visualIssue": "Studio surface/UV fragmentation; retained for further repair, excluded from delivered assembly"
|
||||
},
|
||||
{
|
||||
"id": "fountain",
|
||||
"designImage": "Doc/Design/Scene/HomeCamp/fountain.png",
|
||||
"targetTriangles": 1800,
|
||||
"modelStatus": "visually_validated_and_placed",
|
||||
"position": [
|
||||
0,
|
||||
0,
|
||||
0.8
|
||||
],
|
||||
"highpoly": "Tools/output/homecamp_3d/fountain/fountain.glb",
|
||||
"highpolySha256": "58bd37d217c0ee795fc452ad1c9be5b234374555ab53e24005d47f76847e5078",
|
||||
"highpolyTriangles": 49848,
|
||||
"highpolyBounds": [
|
||||
[
|
||||
-0.5366960167884827,
|
||||
0.0,
|
||||
-0.5384520292282104
|
||||
],
|
||||
[
|
||||
0.539355993270874,
|
||||
0.5473799705505371,
|
||||
0.5376759767532349
|
||||
]
|
||||
],
|
||||
"highpolyJobId": "c03e07d800ef4c7099de2c61cf6e6621",
|
||||
"highpolyCreationId": "d7631df4-6d84-4fec-80f1-ba8a647996db",
|
||||
"highpolyWorkDir": "Tools/data/hunyuan/jobs/c03e07d800ef4c7099de2c61cf6e6621",
|
||||
"finalTriangles": 1795,
|
||||
"productionReceipt": "Tools/output/homecamp_studio/fountain/production.json",
|
||||
"studioLowpolyTask": "44e1b0dcf52449f092f727a06eca1023-0-ac14a25e-3e7f-45fa-b6ea-636b042e",
|
||||
"studioUVTask": "44e1b0dcf52449f092f727a06eca1023-0-123db97c-3a7b-4f87-a9f6-9eb9d58a",
|
||||
"steps": {
|
||||
"01": "highpoly_validated",
|
||||
"02": "studio_lowpoly_completed",
|
||||
"03": "studio_uv_completed",
|
||||
"04": "blender_bake_completed_on_studio_uv",
|
||||
"05": "uv_preserving_decimation_completed"
|
||||
},
|
||||
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/fountain/fountain.prefab",
|
||||
"sourceOutputs": {
|
||||
"Tools/output/homecamp_studio/fountain/xpbr/fountain.fbx": "c226034f71c5ee2f6d0efe8df248369c935608c62959514338f538612e5f1aad",
|
||||
"Tools/output/homecamp_studio/fountain/xpbr/fountain_base.png": "6ad8524be4cdd902349daf41ba9ccc5f8830b1c436114b822ba45bf40a49c451",
|
||||
"Tools/output/homecamp_studio/fountain/xpbr/fountain_mix.png": "0118ecd392cdcfdb5fed0489f1e2df6d5cb3d5a0842d27d21334970d87183512"
|
||||
}
|
||||
}
|
||||
],
|
||||
"reuseCandidates": [
|
||||
{
|
||||
"id": "tree",
|
||||
"prefab": "Assets/Bundles/Scenes/Town/TownSquare/tree/tree.prefab",
|
||||
"status": "rejected_texture_artifacts"
|
||||
},
|
||||
{
|
||||
"id": "lamp",
|
||||
"prefab": "Assets/Bundles/Scenes/Town/TownSquare/lamp/lamp.prefab",
|
||||
"status": "visually_verified"
|
||||
},
|
||||
{
|
||||
"id": "bench",
|
||||
"prefab": "Assets/Bundles/Scenes/Town/TownSquare/bench/bench.prefab",
|
||||
"status": "visually_verified"
|
||||
},
|
||||
{
|
||||
"id": "bush",
|
||||
"prefab": "Assets/Bundles/Scenes/Town/TownSquare/bush/bush.prefab",
|
||||
"status": "rejected_texture_artifacts"
|
||||
}
|
||||
],
|
||||
"backdrop": {
|
||||
"image": "Doc/Design/Scene/HomeCamp/backdrop.png",
|
||||
"representation": "unlit_textured_quad",
|
||||
"meshTriangles": 2,
|
||||
"complexDistantModels": false,
|
||||
"shadows": false,
|
||||
"collider": false,
|
||||
"framingConstraint": "Keep right-side castle and waterfall visible in portrait; mask lower seam with roofs and foliage",
|
||||
"status": "imported_and_authored_in_scene"
|
||||
},
|
||||
"camera": {
|
||||
"position": [
|
||||
0,
|
||||
15,
|
||||
-27
|
||||
],
|
||||
"target": [
|
||||
0,
|
||||
1.8,
|
||||
3
|
||||
],
|
||||
"fieldOfView": 48
|
||||
},
|
||||
"plannedOutputs": {
|
||||
"assetRoot": "Assets/Bundles/Scenes/Town/HomeCamp",
|
||||
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.prefab",
|
||||
"scene": "Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.unity"
|
||||
},
|
||||
"uploadAuthorization": {
|
||||
"status": "authorized_by_user",
|
||||
"destination": "https://3d.hunyuan.tencent.com/",
|
||||
"scope": "Upload only the four listed white-background component images and their derived model files to Hunyuan web/3D Studio for steps 01-03",
|
||||
"authorizationText": "User confirmed upload authorization in this conversation",
|
||||
"authorizedDate": "2026-10-23",
|
||||
"previousRejectionReason": "Automatic review rejected third-party upload because explicit authorization for this destination was not recorded"
|
||||
},
|
||||
"designImageAudit": [
|
||||
{
|
||||
"id": "mainhouse",
|
||||
"path": "Doc/Design/Scene/HomeCamp/mainhouse.png",
|
||||
"width": 1254,
|
||||
"height": 1254,
|
||||
"sha256": "1b1fcb750f72464910aa053f8084829f861a853e1e5cccecc8f494479f2876bd",
|
||||
"corners": [
|
||||
[
|
||||
253,
|
||||
253,
|
||||
253
|
||||
],
|
||||
[
|
||||
255,
|
||||
255,
|
||||
255
|
||||
],
|
||||
[
|
||||
254,
|
||||
254,
|
||||
254
|
||||
],
|
||||
[
|
||||
253,
|
||||
253,
|
||||
253
|
||||
]
|
||||
],
|
||||
"imageDecodes": true,
|
||||
"whiteCornersPass": true
|
||||
},
|
||||
{
|
||||
"id": "cottage",
|
||||
"path": "Doc/Design/Scene/HomeCamp/cottage.png",
|
||||
"width": 1312,
|
||||
"height": 1199,
|
||||
"sha256": "7d290546cbf0e797c02261226fbcbbb4f8919b34e32fb15e5dae6e4c80e2a1ff",
|
||||
"corners": [
|
||||
[
|
||||
253,
|
||||
253,
|
||||
253
|
||||
],
|
||||
[
|
||||
254,
|
||||
254,
|
||||
254
|
||||
],
|
||||
[
|
||||
254,
|
||||
254,
|
||||
254
|
||||
],
|
||||
[
|
||||
254,
|
||||
253,
|
||||
254
|
||||
]
|
||||
],
|
||||
"imageDecodes": true,
|
||||
"whiteCornersPass": true
|
||||
},
|
||||
{
|
||||
"id": "fountain",
|
||||
"path": "Doc/Design/Scene/HomeCamp/fountain.png",
|
||||
"width": 1402,
|
||||
"height": 1122,
|
||||
"sha256": "2ca038060220c0fb0c35ffd5bda0e87e0fe249c4b074faac4123b520f9bdfd39",
|
||||
"corners": [
|
||||
[
|
||||
253,
|
||||
253,
|
||||
253
|
||||
],
|
||||
[
|
||||
255,
|
||||
255,
|
||||
255
|
||||
],
|
||||
[
|
||||
254,
|
||||
254,
|
||||
254
|
||||
],
|
||||
[
|
||||
254,
|
||||
253,
|
||||
254
|
||||
]
|
||||
],
|
||||
"imageDecodes": true,
|
||||
"whiteCornersPass": true
|
||||
},
|
||||
{
|
||||
"id": "ground",
|
||||
"path": "Doc/Design/Scene/HomeCamp/ground.png",
|
||||
"width": 1536,
|
||||
"height": 1024,
|
||||
"sha256": "c129ff8fe81928e77b834e5603f845329e9a4c3da9018bda9ab217e0aac76291",
|
||||
"corners": [
|
||||
[
|
||||
253,
|
||||
253,
|
||||
253
|
||||
],
|
||||
[
|
||||
254,
|
||||
255,
|
||||
255
|
||||
],
|
||||
[
|
||||
254,
|
||||
254,
|
||||
254
|
||||
],
|
||||
[
|
||||
253,
|
||||
253,
|
||||
253
|
||||
]
|
||||
],
|
||||
"imageDecodes": true,
|
||||
"whiteCornersPass": true
|
||||
},
|
||||
{
|
||||
"id": "backdrop",
|
||||
"path": "Doc/Design/Scene/HomeCamp/backdrop.png",
|
||||
"width": 1536,
|
||||
"height": 1024,
|
||||
"sha256": "e854738987f2b384359317d8713ff4bbdf3d27960abe75661727516198f4ccf5",
|
||||
"corners": [
|
||||
[
|
||||
86,
|
||||
173,
|
||||
249
|
||||
],
|
||||
[
|
||||
105,
|
||||
187,
|
||||
248
|
||||
],
|
||||
[
|
||||
104,
|
||||
132,
|
||||
49
|
||||
],
|
||||
[
|
||||
70,
|
||||
101,
|
||||
35
|
||||
]
|
||||
],
|
||||
"imageDecodes": true
|
||||
}
|
||||
],
|
||||
"referenceSha256": "818447d9f9b0cad2dcd08b7cbecd870d2efd62d43d33e2c43ef2056394f96ada",
|
||||
"foliageCards": [
|
||||
{
|
||||
"id": "tree_card",
|
||||
"image": "Doc/Design/Scene/HomeCamp/tree_card.png",
|
||||
"size": [
|
||||
1200,
|
||||
1310
|
||||
],
|
||||
"sha256": "e2b764b9ec9e50fb0a076e3b764a5c6bced053c631cca0ed3e8e6a7eb04e6f98",
|
||||
"representation": "alpha_clipped_unlit_quad",
|
||||
"alphaCutoff": 0.55,
|
||||
"collider": false,
|
||||
"shadows": false
|
||||
},
|
||||
{
|
||||
"id": "flower_card",
|
||||
"image": "Doc/Design/Scene/HomeCamp/flower_card.png",
|
||||
"size": [
|
||||
1536,
|
||||
1024
|
||||
],
|
||||
"sha256": "f898d822667a7b0b94c23cde0705760fb58c05210e47f4157026c719c841e4b6",
|
||||
"representation": "alpha_clipped_unlit_quad",
|
||||
"alphaCutoff": 0.55,
|
||||
"collider": false,
|
||||
"shadows": false
|
||||
}
|
||||
],
|
||||
"assembly": {
|
||||
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.prefab",
|
||||
"scene": "Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.unity",
|
||||
"triangles": 9987,
|
||||
"placements": 31,
|
||||
"groundCollisionSamples": 25,
|
||||
"groundCollisionPassed": 25,
|
||||
"houses": "Three scaled/rotated instances of visually validated mainhouse",
|
||||
"ground": "Pipeline-authored continuous GroundSurface.asset with ground_surface.png; original Studio ground excluded",
|
||||
"mainHudIntegrated": false,
|
||||
"playModeTested": false,
|
||||
"devicePerformanceTested": false
|
||||
},
|
||||
"qa": {
|
||||
"report": "Tools/output/homecamp_review/verification.txt",
|
||||
"portrait": "Tools/output/homecamp_review/homecamp_portrait.png",
|
||||
"tall": "Tools/output/homecamp_review/homecamp_tall.png",
|
||||
"sourcePartViews": "Tools/output/homecamp_review/*_{front,side,back,perspective}.png",
|
||||
"consoleNewErrors": 0,
|
||||
"originalBootSceneDirty": false,
|
||||
"fixedCamera": true,
|
||||
"longScreenLimitation": "Edge buildings and some distant scenery crop; final HUD integration needs device framing"
|
||||
},
|
||||
"authoredGroundSurface": {
|
||||
"mesh": "Assets/Bundles/Scenes/Town/HomeCamp/GroundSurface.asset",
|
||||
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/GroundSurface.prefab",
|
||||
"triangles": 2,
|
||||
"dimensions": [
|
||||
36,
|
||||
42
|
||||
],
|
||||
"texture": "Doc/Design/Scene/HomeCamp/ground_surface.png",
|
||||
"textureSize": [
|
||||
1254,
|
||||
1254
|
||||
],
|
||||
"textureSha256": "12dc5f81435cb50438a665fd54cfe50ba321b6a99ad1a3ebb62513964ce7a2e3",
|
||||
"creation": "Unity Pipeline editing cleanup after the five model stages; not Studio UV"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 1.6 MiB |
@@ -0,0 +1,28 @@
|
||||
# 技能/UI 混音试听收尾(2026-10-22)
|
||||
|
||||
已生成五份可试听的离线混音,使用正式入库音频、Unity Pipeline 读取的真实音源参数及第20关 T2 权威轨迹。**这是离线重建,不是 Unity 实录或微信设备录音;主观听审尚待确认。**
|
||||
|
||||
| 试听文件 | 内容与时间定位 | 长度 | 4倍过采样峰值 |
|
||||
| --- | --- | --- | --- |
|
||||
| [menu_ui.wav](menu_ui.wav) | 《微风小镇》+10个v3 UI音效;1.0秒起每1.4秒依次 Click/Confirm/Back/Open/Close/Tab/Claim/Deny/Toggle/Notify | 17秒 | -4.31 dBFS |
|
||||
| [skill_bank.wav](skill_bank.wav) | 0.75秒起每1.6秒依次 FireCharge/FireLaunch/FireHit/RockHit/Shield/Heal/Slow/Lightning/EnemyHit,保持正式单音增益 | 16秒 | -30.29 dBFS |
|
||||
| [battle_1x.wav](battle_1x.wav) | 第20关T2轨迹前23.5秒,技能+敌人反馈;tick200时模拟UI开关音(1×为10.5秒)。菜单BGM按现有战斗规则暂停 | 26秒 | -9.47 dBFS |
|
||||
| [battle_2x.wav](battle_2x.wav) | 同一轨迹双速,原音高,5.5秒模拟UI开关音;技能与敌人池抢占、同cast去重及敌人75ms同音保护 | 26秒 | -9.47 dBFS |
|
||||
| [overlap_stress.wav](overlap_stress.wav) | 1~4.75秒每0.25秒叠加9种技能、5种敌人攻击和1种UI音效;人为压力样例 | 8秒 | -3.47 dBFS |
|
||||
|
||||
输出为48kHz/PCM16/立体声。对应 `*_float.wav` 保留未截幅浮点母带,逐文件JSON包含事件时刻、声道池、增益及源音频SHA256。`validation.json` 汇总PCM哈希、样本峰值、4倍过采样峰值、RMS和越界样本数。五份越界样本数均为0,未加归一化或限幅器;这个结果只代表所列样例,不是任意输入或设备的零削波保证。
|
||||
|
||||
## 混音关注点
|
||||
|
||||
- 正式技能音源每路0.0375(0.3÷8),敌人池预算0.7/单路上限0.4,UI为0.8,菜单BGM为1.0。当前技能单音峰值约-30dBFS,应重点听治疗、护盾、减速在敌人连续攻击中是否被遮盖;本轮未擅自改变正式增益。
|
||||
- 对比 `menu_ui` 的 Claim/Deny/Toggle 与 `battle_2x`,确认UI提示清晰但不过分突出;密集叠加检查刺耳、疲劳与抢占尾音。
|
||||
- `skill_bank` 与前一首的听感响度不同,这是正式参数的实际比例,不能把逐文件归一化后的播放用作混音判断。
|
||||
- 音色喜好、遮蔽感和舒适度仍需人工试听;微信真机延迟、帧耗、内存和输出设备差异未在本轮验收。
|
||||
|
||||
## 方法与边界
|
||||
|
||||
入口 `python Tools/build_audio_mix_review.py`。输入参数回执 `unity_snapshot.json` 来自 `ReviewAudioMix.Snapshot`,通过Pipeline读取持久化Prefab;脚本只读正式资源和既有轨迹,不改服务器、账号、声音文件、Prefab或运行时代码。战斗离线重建遵循 `PrototypeBattle.Trace` 的命中映射以及 `PrototypeFlow.DrainBattleFeedback` 的敌人先于技能队列顺序;省略普通受击重复声音,重用8+8音源,技能按cast去重。没有模拟真实帧抖动、播放器过期事件或音频驱动延迟,不能替代实机同步测试。
|
||||
|
||||
曾尝试通过 `UnityEngine.AudioRenderer` 导出实录,但调用超时且Pipeline停止响应,没有产出可用实录。已移除录音入口,关闭本轮临时Play并重新打开原项目;启动前Boot无脏内容,恢复回执 `unity_recovery.json` 确认Boot无脏内容、非Play、无临时对象,当前音乐与音效开关均开启。原音效开关值只保存在被中断的内存任务中,重启后无法重新核验此前偏好;不声称该偏好已逐值还原。失败尝试不作为验收证据。API用途参考[Unity AudioRenderer官方文档](https://docs.unity.cn/2022.1/Documentation/ScriptReference/AudioRenderer.html)。
|
||||
|
||||
`python Tools/verify_partner_skills.py` 与 `python Tools/validate_skill_runtime.py` 通过:9/9音效与源/请求/成品哈希、25技能、10伙伴、5敌人和20关正式契约一致。TangoFlux来源声音沿用现有许可记录,本轮没有变更授权结论。未构建或发布Player。
|
||||
@@ -0,0 +1,450 @@
|
||||
{
|
||||
"metrics": {
|
||||
"file": "battle_1x.wav",
|
||||
"floatMaster": "battle_1x_float.wav",
|
||||
"seconds": 26.0,
|
||||
"samplePeakDbfs": -9.634100414519697,
|
||||
"truePeak4xDbfs": -9.470244709901838,
|
||||
"rmsDbfs": -34.24835971765098,
|
||||
"overRangeSamples": 0,
|
||||
"eventCount": 53,
|
||||
"maxSkillVoices": 8,
|
||||
"maxEnemyVoices": 8,
|
||||
"sha256": "6e0990d1246fc357ce6a6493db028f3ab476fd003010b49046ac17ceac051ae5"
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"time": 0.5,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Shield",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 1
|
||||
},
|
||||
{
|
||||
"time": 6.3,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 2
|
||||
},
|
||||
{
|
||||
"time": 6.85,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 2
|
||||
},
|
||||
{
|
||||
"time": 7.35,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 2
|
||||
},
|
||||
{
|
||||
"time": 7.4,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 3
|
||||
},
|
||||
{
|
||||
"time": 7.85,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 3
|
||||
},
|
||||
{
|
||||
"time": 8.3,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 3
|
||||
},
|
||||
{
|
||||
"time": 8.3,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 4
|
||||
},
|
||||
{
|
||||
"time": 8.5,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Shield",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 5
|
||||
},
|
||||
{
|
||||
"time": 8.75,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 4
|
||||
},
|
||||
{
|
||||
"time": 9.15,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 4
|
||||
},
|
||||
{
|
||||
"time": 9.2,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 8
|
||||
},
|
||||
{
|
||||
"time": 9.25,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 6
|
||||
},
|
||||
{
|
||||
"time": 9.25,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Slow",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 7
|
||||
},
|
||||
{
|
||||
"time": 9.65,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 8
|
||||
},
|
||||
{
|
||||
"time": 10.0,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 8
|
||||
},
|
||||
{
|
||||
"time": 10.1,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 10
|
||||
},
|
||||
{
|
||||
"time": 10.4,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 9
|
||||
},
|
||||
{
|
||||
"time": 10.5,
|
||||
"bank": "ui",
|
||||
"id": "Ui_Toggle",
|
||||
"gain": 0.8
|
||||
},
|
||||
{
|
||||
"time": 10.55,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 10
|
||||
},
|
||||
{
|
||||
"time": 10.85,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 10
|
||||
},
|
||||
{
|
||||
"time": 11.2,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 11
|
||||
},
|
||||
{
|
||||
"time": 11.95,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 12
|
||||
},
|
||||
{
|
||||
"time": 16.35,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 14
|
||||
},
|
||||
{
|
||||
"time": 16.5,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Shield",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 15
|
||||
},
|
||||
{
|
||||
"time": 16.75,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Slow",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 13
|
||||
},
|
||||
{
|
||||
"time": 16.75,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 14
|
||||
},
|
||||
{
|
||||
"time": 17.15,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 16
|
||||
},
|
||||
{
|
||||
"time": 17.2,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 0,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 17.2,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 14
|
||||
},
|
||||
{
|
||||
"time": 17.45,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 16
|
||||
},
|
||||
{
|
||||
"time": 17.9,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 1,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 17.9,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 16
|
||||
},
|
||||
{
|
||||
"time": 18.15,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 17
|
||||
},
|
||||
{
|
||||
"time": 18.45,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 17
|
||||
},
|
||||
{
|
||||
"time": 18.85,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 2,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 18.85,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 17
|
||||
},
|
||||
{
|
||||
"time": 19.15,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 18
|
||||
},
|
||||
{
|
||||
"time": 19.45,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 18
|
||||
},
|
||||
{
|
||||
"time": 19.85,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 3,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 19.85,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 18
|
||||
},
|
||||
{
|
||||
"time": 20.15,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 19
|
||||
},
|
||||
{
|
||||
"time": 20.45,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 19
|
||||
},
|
||||
{
|
||||
"time": 20.8,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 4,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 20.8,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 19
|
||||
},
|
||||
{
|
||||
"time": 21.15,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 20
|
||||
},
|
||||
{
|
||||
"time": 21.45,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 20
|
||||
},
|
||||
{
|
||||
"time": 21.75,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 5,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 21.75,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 20
|
||||
},
|
||||
{
|
||||
"time": 22.15,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 22
|
||||
},
|
||||
{
|
||||
"time": 22.25,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 6,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 22.25,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_RockHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 21
|
||||
},
|
||||
{
|
||||
"time": 22.45,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 22
|
||||
}
|
||||
],
|
||||
"sources": {
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Shield.wav": "52119154552ac4fbbde0d94d34011be1749c019dec3764c31ecb7fae1b8fff37",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_FireCharge.wav": "686f9799eb264fcf310edb63dd69f75d16be94092bda40b3c341b0df18765217",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_FireLaunch.wav": "e6f40a6d9a7e57f6fd56051c2393315c0610554921f5e26459eab2cbde40bbd2",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_FireHit.wav": "d7c39fe8d2a270ab1241ee655f13d775f0e9c7cc0c3d38fdd6da2b33da493039",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Lightning.wav": "a8e6f806b3e62e8916929d39b63f9d6cfd1f534dc44f49f79d99a490753ed00a",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Slow.wav": "e191cc6baa46fa6e1c46f77eaa072495c52b4c75d47be98cfd7a81ca14a134c9",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Toggle.wav": "8d29ebb52a1c5c3906c43d031fd664ac9a1e051b2aa75cc435e4d10c9b7c9bdb",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/EnemyCombat/Enemy_HitArmor.wav": "f82ee2e53805549523a5443915258909e64965db2a12bcdecc090083f763f562",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_RockHit.wav": "092735b139b22e0e5a1cd851c493fb1d6c9ff320cfdd33fdefc73db725a37a59"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,940 @@
|
||||
{
|
||||
"metrics": {
|
||||
"file": "battle_2x.wav",
|
||||
"floatMaster": "battle_2x_float.wav",
|
||||
"seconds": 26.0,
|
||||
"samplePeakDbfs": -9.578677334465777,
|
||||
"truePeak4xDbfs": -9.474940870674805,
|
||||
"rmsDbfs": -31.007300179811196,
|
||||
"overRangeSamples": 0,
|
||||
"eventCount": 114,
|
||||
"maxSkillVoices": 8,
|
||||
"maxEnemyVoices": 8,
|
||||
"sha256": "a6f2052e36f5d14b99392c6f74d88fa9e4842a3e067a26dcdaba14ba0c1594aa"
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"time": 0.5,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Shield",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 1
|
||||
},
|
||||
{
|
||||
"time": 3.4,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 2
|
||||
},
|
||||
{
|
||||
"time": 3.675,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 2
|
||||
},
|
||||
{
|
||||
"time": 3.925,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 2
|
||||
},
|
||||
{
|
||||
"time": 3.95,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 3
|
||||
},
|
||||
{
|
||||
"time": 4.175,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 3
|
||||
},
|
||||
{
|
||||
"time": 4.4,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 3
|
||||
},
|
||||
{
|
||||
"time": 4.4,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 4
|
||||
},
|
||||
{
|
||||
"time": 4.5,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Shield",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 5
|
||||
},
|
||||
{
|
||||
"time": 4.625,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 4
|
||||
},
|
||||
{
|
||||
"time": 4.825,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 4
|
||||
},
|
||||
{
|
||||
"time": 4.85,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 8
|
||||
},
|
||||
{
|
||||
"time": 4.875,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 6
|
||||
},
|
||||
{
|
||||
"time": 4.875,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Slow",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 7
|
||||
},
|
||||
{
|
||||
"time": 5.075,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 8
|
||||
},
|
||||
{
|
||||
"time": 5.25,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 8
|
||||
},
|
||||
{
|
||||
"time": 5.3,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 10
|
||||
},
|
||||
{
|
||||
"time": 5.45,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 9
|
||||
},
|
||||
{
|
||||
"time": 5.5,
|
||||
"bank": "ui",
|
||||
"id": "Ui_Toggle",
|
||||
"gain": 0.8
|
||||
},
|
||||
{
|
||||
"time": 5.525,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 10
|
||||
},
|
||||
{
|
||||
"time": 5.675,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 10
|
||||
},
|
||||
{
|
||||
"time": 5.85,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 11
|
||||
},
|
||||
{
|
||||
"time": 6.225,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 12
|
||||
},
|
||||
{
|
||||
"time": 8.425,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 14
|
||||
},
|
||||
{
|
||||
"time": 8.5,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Shield",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 15
|
||||
},
|
||||
{
|
||||
"time": 8.625,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Slow",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 13
|
||||
},
|
||||
{
|
||||
"time": 8.625,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 14
|
||||
},
|
||||
{
|
||||
"time": 8.825,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 16
|
||||
},
|
||||
{
|
||||
"time": 8.85,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 0,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 8.85,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 14
|
||||
},
|
||||
{
|
||||
"time": 8.975,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 16
|
||||
},
|
||||
{
|
||||
"time": 9.2,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 1,
|
||||
"gain": 0.35,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 9.2,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 16
|
||||
},
|
||||
{
|
||||
"time": 9.325,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 17
|
||||
},
|
||||
{
|
||||
"time": 9.475,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 17
|
||||
},
|
||||
{
|
||||
"time": 9.675,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 2,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 9.675,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 17
|
||||
},
|
||||
{
|
||||
"time": 9.825,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 18
|
||||
},
|
||||
{
|
||||
"time": 9.975,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 18
|
||||
},
|
||||
{
|
||||
"time": 10.175,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 3,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 10.175,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 18
|
||||
},
|
||||
{
|
||||
"time": 10.325,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 19
|
||||
},
|
||||
{
|
||||
"time": 10.475,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 19
|
||||
},
|
||||
{
|
||||
"time": 10.65,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 4,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 10.65,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 19
|
||||
},
|
||||
{
|
||||
"time": 10.825,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 20
|
||||
},
|
||||
{
|
||||
"time": 10.975,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 20
|
||||
},
|
||||
{
|
||||
"time": 11.125,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 5,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 11.125,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 20
|
||||
},
|
||||
{
|
||||
"time": 11.325,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 22
|
||||
},
|
||||
{
|
||||
"time": 11.375,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 6,
|
||||
"gain": 0.35,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 11.375,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_RockHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 21
|
||||
},
|
||||
{
|
||||
"time": 11.475,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 22
|
||||
},
|
||||
{
|
||||
"time": 12.5,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Shield",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 23
|
||||
},
|
||||
{
|
||||
"time": 14.6,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 24
|
||||
},
|
||||
{
|
||||
"time": 14.875,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 24
|
||||
},
|
||||
{
|
||||
"time": 15.125,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 7,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 15.125,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 24
|
||||
},
|
||||
{
|
||||
"time": 15.15,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 25
|
||||
},
|
||||
{
|
||||
"time": 15.375,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 25
|
||||
},
|
||||
{
|
||||
"time": 15.6,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 0,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 15.6,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 25
|
||||
},
|
||||
{
|
||||
"time": 15.6,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 26
|
||||
},
|
||||
{
|
||||
"time": 15.825,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 26
|
||||
},
|
||||
{
|
||||
"time": 16.025,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 1,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 16.025,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 26
|
||||
},
|
||||
{
|
||||
"time": 16.05,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 27
|
||||
},
|
||||
{
|
||||
"time": 16.275,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 27
|
||||
},
|
||||
{
|
||||
"time": 16.45,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 2,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 16.45,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 27
|
||||
},
|
||||
{
|
||||
"time": 16.5,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 31
|
||||
},
|
||||
{
|
||||
"time": 16.5,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Shield",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 30
|
||||
},
|
||||
{
|
||||
"time": 16.6,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 28
|
||||
},
|
||||
{
|
||||
"time": 16.6,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Slow",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 29
|
||||
},
|
||||
{
|
||||
"time": 16.725,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 31
|
||||
},
|
||||
{
|
||||
"time": 16.875,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 3,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 16.875,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 31
|
||||
},
|
||||
{
|
||||
"time": 16.95,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 33
|
||||
},
|
||||
{
|
||||
"time": 17.175,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 33
|
||||
},
|
||||
{
|
||||
"time": 17.2,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 32
|
||||
},
|
||||
{
|
||||
"time": 17.3,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 4,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 17.3,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 33
|
||||
},
|
||||
{
|
||||
"time": 17.325,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_RockHit",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 34
|
||||
},
|
||||
{
|
||||
"time": 17.4,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 36
|
||||
},
|
||||
{
|
||||
"time": 17.575,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 35
|
||||
},
|
||||
{
|
||||
"time": 17.625,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 36
|
||||
},
|
||||
{
|
||||
"time": 17.725,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 5,
|
||||
"gain": 0.4,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 17.725,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 36
|
||||
},
|
||||
{
|
||||
"time": 17.85,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 40
|
||||
},
|
||||
{
|
||||
"time": 17.875,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HornCaptainAttack",
|
||||
"voice": 6,
|
||||
"gain": 0.35,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 17.875,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitShield",
|
||||
"voice": 7,
|
||||
"gain": 0.2333333333333333,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 17.925,
|
||||
"bank": "enemy",
|
||||
"id": "Enemy_HitArmor",
|
||||
"voice": 0,
|
||||
"gain": 0.175,
|
||||
"cast": 0
|
||||
},
|
||||
{
|
||||
"time": 17.925,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_RockHit",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 38
|
||||
},
|
||||
{
|
||||
"time": 17.975,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 37
|
||||
},
|
||||
{
|
||||
"time": 18.125,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 43
|
||||
},
|
||||
{
|
||||
"time": 18.125,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 40
|
||||
},
|
||||
{
|
||||
"time": 18.325,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Slow",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 42
|
||||
},
|
||||
{
|
||||
"time": 18.325,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 43
|
||||
},
|
||||
{
|
||||
"time": 18.35,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 41
|
||||
},
|
||||
{
|
||||
"time": 18.525,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 44
|
||||
},
|
||||
{
|
||||
"time": 18.55,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 43
|
||||
},
|
||||
{
|
||||
"time": 18.675,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 44
|
||||
},
|
||||
{
|
||||
"time": 18.875,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 44
|
||||
},
|
||||
{
|
||||
"time": 19.025,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 45
|
||||
},
|
||||
{
|
||||
"time": 19.175,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 45
|
||||
},
|
||||
{
|
||||
"time": 19.35,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 45
|
||||
},
|
||||
{
|
||||
"time": 19.525,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 46
|
||||
},
|
||||
{
|
||||
"time": 19.675,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 46
|
||||
},
|
||||
{
|
||||
"time": 19.85,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 46
|
||||
},
|
||||
{
|
||||
"time": 20.025,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 47
|
||||
},
|
||||
{
|
||||
"time": 20.175,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 47
|
||||
},
|
||||
{
|
||||
"time": 20.3,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 47
|
||||
},
|
||||
{
|
||||
"time": 20.4,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_RockHit",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 48
|
||||
},
|
||||
{
|
||||
"time": 20.5,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Shield",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 49
|
||||
}
|
||||
],
|
||||
"sources": {
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Shield.wav": "52119154552ac4fbbde0d94d34011be1749c019dec3764c31ecb7fae1b8fff37",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_FireCharge.wav": "686f9799eb264fcf310edb63dd69f75d16be94092bda40b3c341b0df18765217",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_FireLaunch.wav": "e6f40a6d9a7e57f6fd56051c2393315c0610554921f5e26459eab2cbde40bbd2",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_FireHit.wav": "d7c39fe8d2a270ab1241ee655f13d775f0e9c7cc0c3d38fdd6da2b33da493039",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Lightning.wav": "a8e6f806b3e62e8916929d39b63f9d6cfd1f534dc44f49f79d99a490753ed00a",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Slow.wav": "e191cc6baa46fa6e1c46f77eaa072495c52b4c75d47be98cfd7a81ca14a134c9",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Toggle.wav": "8d29ebb52a1c5c3906c43d031fd664ac9a1e051b2aa75cc435e4d10c9b7c9bdb",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/EnemyCombat/Enemy_HitArmor.wav": "f82ee2e53805549523a5443915258909e64965db2a12bcdecc090083f763f562",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_RockHit.wav": "092735b139b22e0e5a1cd851c493fb1d6c9ff320cfdd33fdefc73db725a37a59",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/EnemyCombat/Enemy_HornCaptainAttack.wav": "99ac39aa3775bc4ba0def1196216744e12ddcb8523a4096aa63cedfcb6811723",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/EnemyCombat/Enemy_HitShield.wav": "13d4dfad5668a40e8538b1e4320e1fcff20eacc0d53f67bb7540170b981c1045"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"metrics": {
|
||||
"file": "menu_ui.wav",
|
||||
"floatMaster": "menu_ui_float.wav",
|
||||
"seconds": 17.0,
|
||||
"samplePeakDbfs": -4.336533226935635,
|
||||
"truePeak4xDbfs": -4.309702970908978,
|
||||
"rmsDbfs": -24.227830554413536,
|
||||
"overRangeSamples": 0,
|
||||
"eventCount": 11,
|
||||
"maxSkillVoices": 8,
|
||||
"maxEnemyVoices": 8,
|
||||
"sha256": "62876e48d5caca9dcb95b7f8b4a2eff3efb1d6dd0f4b2301c46af9daccfc914f"
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"time": 0,
|
||||
"bank": "music",
|
||||
"id": "MeadowBreeze_MainMenu_Loop",
|
||||
"gain": 1.0
|
||||
},
|
||||
{
|
||||
"time": 1.0,
|
||||
"bank": "ui",
|
||||
"id": "Ui_Click",
|
||||
"gain": 0.8
|
||||
},
|
||||
{
|
||||
"time": 2.4,
|
||||
"bank": "ui",
|
||||
"id": "Ui_Confirm",
|
||||
"gain": 0.8
|
||||
},
|
||||
{
|
||||
"time": 3.8,
|
||||
"bank": "ui",
|
||||
"id": "Ui_Back",
|
||||
"gain": 0.8
|
||||
},
|
||||
{
|
||||
"time": 5.199999999999999,
|
||||
"bank": "ui",
|
||||
"id": "Ui_Open",
|
||||
"gain": 0.8
|
||||
},
|
||||
{
|
||||
"time": 6.6,
|
||||
"bank": "ui",
|
||||
"id": "Ui_Close",
|
||||
"gain": 0.8
|
||||
},
|
||||
{
|
||||
"time": 8.0,
|
||||
"bank": "ui",
|
||||
"id": "Ui_Tab",
|
||||
"gain": 0.8
|
||||
},
|
||||
{
|
||||
"time": 9.399999999999999,
|
||||
"bank": "ui",
|
||||
"id": "Ui_Claim",
|
||||
"gain": 0.8
|
||||
},
|
||||
{
|
||||
"time": 10.799999999999999,
|
||||
"bank": "ui",
|
||||
"id": "Ui_Deny",
|
||||
"gain": 0.8
|
||||
},
|
||||
{
|
||||
"time": 12.2,
|
||||
"bank": "ui",
|
||||
"id": "Ui_Toggle",
|
||||
"gain": 0.8
|
||||
},
|
||||
{
|
||||
"time": 13.6,
|
||||
"bank": "ui",
|
||||
"id": "Ui_Notify",
|
||||
"gain": 0.8
|
||||
}
|
||||
],
|
||||
"sources": {
|
||||
"AIClient/Assets/Bundles/Sound/BGM/MeadowBreeze_MainMenu_Loop.ogg": "ce19b4f816656e8ce523c5b165527dcd90ddac8bd8eed9ce3a402fa018b19bdf",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Click.wav": "6cc0a468cff5257df32c80f7c889dec9c43d2dd782f33d715164eaceffda6a60",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Confirm.wav": "bb3963b6686ad7abd91cf555569025c4f18c0aa355caf908904ebf96edb98f3d",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Back.wav": "88a95f5296ec92e3db938a2d90945c8b1cef58986dcb1e3b6bbfa181812d54c7",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Open.wav": "cf0845ee381195e5e4bdbfe38982eeebfac5d57965ce138fa06d010c285345a2",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Close.wav": "3bf81c1b0b39d5c06e93251f1062aab72bc9ed07d5a035691e441e71518af94a",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Tab.wav": "738c52ce558345c0ce0b435e1069a1e8f3e22c5889418a5df9dbdfb266e2baa4",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Claim.wav": "6cf1265877b26b2967bd1c7a12021c3d03abf31a7e39f2259b96da8a1d7a8222",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Deny.wav": "2321b48a29d51a7a9409a2e2f6e2e995a5f59eba16ac3302934a88a5111fc21a",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Toggle.wav": "8d29ebb52a1c5c3906c43d031fd664ac9a1e051b2aa75cc435e4d10c9b7c9bdb",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Notify.wav": "94424ff77df4177bcc67f3c4aa5f9fefeea4a39020a53d2dd984de458a8ed6b4"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"metrics": {
|
||||
"file": "skill_bank.wav",
|
||||
"floatMaster": "skill_bank_float.wav",
|
||||
"seconds": 16.0,
|
||||
"samplePeakDbfs": -30.34804044468181,
|
||||
"truePeak4xDbfs": -30.292306143405607,
|
||||
"rmsDbfs": -49.74545438120102,
|
||||
"overRangeSamples": 0,
|
||||
"eventCount": 9,
|
||||
"maxSkillVoices": 8,
|
||||
"maxEnemyVoices": 8,
|
||||
"sha256": "6d32ada277f8cb169ba8c91a2b5a710ac381210d433a59fbecb518c5eda976bd"
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"time": 0.75,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireCharge",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 1
|
||||
},
|
||||
{
|
||||
"time": 2.35,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireLaunch",
|
||||
"voice": 1,
|
||||
"gain": 0.0375,
|
||||
"cast": 2
|
||||
},
|
||||
{
|
||||
"time": 3.95,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_FireHit",
|
||||
"voice": 2,
|
||||
"gain": 0.0375,
|
||||
"cast": 3
|
||||
},
|
||||
{
|
||||
"time": 5.55,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_RockHit",
|
||||
"voice": 3,
|
||||
"gain": 0.0375,
|
||||
"cast": 4
|
||||
},
|
||||
{
|
||||
"time": 7.15,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Shield",
|
||||
"voice": 4,
|
||||
"gain": 0.0375,
|
||||
"cast": 5
|
||||
},
|
||||
{
|
||||
"time": 8.75,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Heal",
|
||||
"voice": 5,
|
||||
"gain": 0.0375,
|
||||
"cast": 6
|
||||
},
|
||||
{
|
||||
"time": 10.35,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Slow",
|
||||
"voice": 6,
|
||||
"gain": 0.0375,
|
||||
"cast": 7
|
||||
},
|
||||
{
|
||||
"time": 11.95,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_Lightning",
|
||||
"voice": 7,
|
||||
"gain": 0.0375,
|
||||
"cast": 8
|
||||
},
|
||||
{
|
||||
"time": 13.55,
|
||||
"bank": "skill",
|
||||
"id": "Sfx_EnemyHit",
|
||||
"voice": 0,
|
||||
"gain": 0.0375,
|
||||
"cast": 9
|
||||
}
|
||||
],
|
||||
"sources": {
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_FireCharge.wav": "686f9799eb264fcf310edb63dd69f75d16be94092bda40b3c341b0df18765217",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_FireLaunch.wav": "e6f40a6d9a7e57f6fd56051c2393315c0610554921f5e26459eab2cbde40bbd2",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_FireHit.wav": "d7c39fe8d2a270ab1241ee655f13d775f0e9c7cc0c3d38fdd6da2b33da493039",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_RockHit.wav": "092735b139b22e0e5a1cd851c493fb1d6c9ff320cfdd33fdefc73db725a37a59",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Shield.wav": "52119154552ac4fbbde0d94d34011be1749c019dec3764c31ecb7fae1b8fff37",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Heal.wav": "61ab8a7cd7feed49646752ad921c50dbfbec33ce8d3b534d4451f3638ff5df89",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Slow.wav": "e191cc6baa46fa6e1c46f77eaa072495c52b4c75d47be98cfd7a81ca14a134c9",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_Lightning.wav": "a8e6f806b3e62e8916929d39b63f9d6cfd1f534dc44f49f79d99a490753ed00a",
|
||||
"AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_EnemyHit.wav": "2cdb0a6f272f1bd5fac3ffab34fffaa52104a38056debe944e7913d7cf6ef93f"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"status": "pass",
|
||||
"utc": "2026-10-22T01:53:31.4161431Z",
|
||||
"playing": false,
|
||||
"scenes": [
|
||||
{
|
||||
"path": "Assets/Scenes/Boot.unity",
|
||||
"isDirty": false
|
||||
}
|
||||
],
|
||||
"sfx": true,
|
||||
"music": true,
|
||||
"preferenceBaseline": "Original SFX value was held in the interrupted task; exact pre-capture preference could not be reverified after restart",
|
||||
"audio": {
|
||||
"speakerMode": 2,
|
||||
"dspBufferSize": 1024,
|
||||
"sampleRate": 48000,
|
||||
"numRealVoices": 32,
|
||||
"numVirtualVoices": 512
|
||||
},
|
||||
"temporaryReviewObjects": 0
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"status": "pass",
|
||||
"utc": "2026-10-22T01:46:14.9756500Z",
|
||||
"skill": [
|
||||
{
|
||||
"name": "Voice0",
|
||||
"volume": 0.0375,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice1",
|
||||
"volume": 0.0375,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice2",
|
||||
"volume": 0.0375,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice3",
|
||||
"volume": 0.0375,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice4",
|
||||
"volume": 0.0375,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice5",
|
||||
"volume": 0.0375,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice6",
|
||||
"volume": 0.0375,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice7",
|
||||
"volume": 0.0375,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
}
|
||||
],
|
||||
"enemy": [
|
||||
{
|
||||
"name": "Voice0",
|
||||
"volume": 0.4,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice1",
|
||||
"volume": 0.4,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice2",
|
||||
"volume": 0.4,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice3",
|
||||
"volume": 0.4,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice4",
|
||||
"volume": 0.4,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice5",
|
||||
"volume": 0.4,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice6",
|
||||
"volume": 0.4,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
},
|
||||
{
|
||||
"name": "Voice7",
|
||||
"volume": 0.4,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
}
|
||||
],
|
||||
"ui": [
|
||||
{
|
||||
"name": "UiSfx",
|
||||
"volume": 0.8,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": false,
|
||||
"clip": ""
|
||||
}
|
||||
],
|
||||
"music": [
|
||||
{
|
||||
"name": "MainMenuMusic",
|
||||
"volume": 1.0,
|
||||
"pitch": 1.0,
|
||||
"spatialBlend": 0.0,
|
||||
"loop": true,
|
||||
"clip": "Assets/Bundles/Sound/BGM/MeadowBreeze_MainMenu_Loop.ogg"
|
||||
}
|
||||
],
|
||||
"enemyMixBudget": 0.7,
|
||||
"enemyVoiceVolume": 0.4,
|
||||
"audio": {
|
||||
"speakerMode": 2,
|
||||
"dspBufferSize": 1024,
|
||||
"sampleRate": 48000,
|
||||
"numRealVoices": 32,
|
||||
"numVirtualVoices": 512
|
||||
},
|
||||
"listenerVolume": 1.0,
|
||||
"subjectivelyApproved": false,
|
||||
"accountWrites": false
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"status": "pass",
|
||||
"method": "offline reconstruction from installed clips, Pipeline snapshot and authoritative trace; not a loopback recording",
|
||||
"rendererAttempt": "Unity AudioRenderer timed out; not used as acceptance evidence",
|
||||
"rate": 48000,
|
||||
"channels": 2,
|
||||
"normalized": false,
|
||||
"limiter": false,
|
||||
"subjectivelyApproved": false,
|
||||
"snapshotSha256": "a6bf2419730c1f97a709dbad86ae11e75e12796a011356a7d1228fa031b893b0",
|
||||
"traceSha256": "aa9109ff487d56166076ad4e56ec3c621345e14dcb606f1beed7a7423aa8fa99",
|
||||
"files": [
|
||||
{
|
||||
"file": "menu_ui.wav",
|
||||
"floatMaster": "menu_ui_float.wav",
|
||||
"seconds": 17.0,
|
||||
"samplePeakDbfs": -4.336533226935635,
|
||||
"truePeak4xDbfs": -4.309702970908978,
|
||||
"rmsDbfs": -24.227830554413536,
|
||||
"overRangeSamples": 0,
|
||||
"eventCount": 11,
|
||||
"maxSkillVoices": 8,
|
||||
"maxEnemyVoices": 8,
|
||||
"sha256": "62876e48d5caca9dcb95b7f8b4a2eff3efb1d6dd0f4b2301c46af9daccfc914f"
|
||||
},
|
||||
{
|
||||
"file": "skill_bank.wav",
|
||||
"floatMaster": "skill_bank_float.wav",
|
||||
"seconds": 16.0,
|
||||
"samplePeakDbfs": -30.34804044468181,
|
||||
"truePeak4xDbfs": -30.292306143405607,
|
||||
"rmsDbfs": -49.74545438120102,
|
||||
"overRangeSamples": 0,
|
||||
"eventCount": 9,
|
||||
"maxSkillVoices": 8,
|
||||
"maxEnemyVoices": 8,
|
||||
"sha256": "6d32ada277f8cb169ba8c91a2b5a710ac381210d433a59fbecb518c5eda976bd"
|
||||
},
|
||||
{
|
||||
"file": "battle_1x.wav",
|
||||
"floatMaster": "battle_1x_float.wav",
|
||||
"seconds": 26.0,
|
||||
"samplePeakDbfs": -9.634100414519697,
|
||||
"truePeak4xDbfs": -9.470244709901838,
|
||||
"rmsDbfs": -34.24835971765098,
|
||||
"overRangeSamples": 0,
|
||||
"eventCount": 53,
|
||||
"maxSkillVoices": 8,
|
||||
"maxEnemyVoices": 8,
|
||||
"sha256": "6e0990d1246fc357ce6a6493db028f3ab476fd003010b49046ac17ceac051ae5"
|
||||
},
|
||||
{
|
||||
"file": "battle_2x.wav",
|
||||
"floatMaster": "battle_2x_float.wav",
|
||||
"seconds": 26.0,
|
||||
"samplePeakDbfs": -9.578677334465777,
|
||||
"truePeak4xDbfs": -9.474940870674805,
|
||||
"rmsDbfs": -31.007300179811196,
|
||||
"overRangeSamples": 0,
|
||||
"eventCount": 114,
|
||||
"maxSkillVoices": 8,
|
||||
"maxEnemyVoices": 8,
|
||||
"sha256": "a6f2052e36f5d14b99392c6f74d88fa9e4842a3e067a26dcdaba14ba0c1594aa"
|
||||
},
|
||||
{
|
||||
"file": "overlap_stress.wav",
|
||||
"floatMaster": "overlap_stress_float.wav",
|
||||
"seconds": 8.0,
|
||||
"samplePeakDbfs": -3.496114864043605,
|
||||
"truePeak4xDbfs": -3.4662523640408245,
|
||||
"rmsDbfs": -22.092218848433497,
|
||||
"overRangeSamples": 0,
|
||||
"eventCount": 240,
|
||||
"maxSkillVoices": 8,
|
||||
"maxEnemyVoices": 8,
|
||||
"sha256": "4d94bfec886f5c447ae1ec32b94c42233a1bc4836ebdecd251c53265d1c3a8fa"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -77,3 +77,8 @@ v2 试听反馈为“不好听”,与清脆轻松的游戏风格不符。v3
|
||||
- 音色:木琴(基频加 3.93×、9.2× 快衰泛音)、钟琴(1 / 2.76 / 5.40 / 8.93× 非谐泛音)、气泡 pop(快速上滑的正弦),以及 4ms 高通噪声作起音。
|
||||
- 映射:Click 气泡 pop;Tab 木琴 A6 轻敲;Toggle 两连 pop;Confirm 木琴 E6→B6 上行;Back 木琴 G6→D6 下行;Open 上滑加 E7 叮;Close 下滑加 G5 闷敲;Claim 钟琴 C6-E6-G6-C7 琶音加高音闪烁;Deny 两声低音柔和 boop;Notify 钟琴 G6→D7 叮叮。
|
||||
- 调整:改 `RECIPES` 里的音高、衰减和音量后运行 `python Tools/synth_ui_sfx.py --preview`,再在 Unity 里执行 `BuildUiSfx.Build`。
|
||||
|
||||
|
||||
## 当前试听入口(2026-10-22)
|
||||
|
||||
当前正式资源是v3,以上v1/v2均为历史。已将全部10条v3与正式《微风小镇》BGM按持久化音量离线混合,试听 [menu_ui.wav](../MixReview/menu_ui.wav);战斗及双速/叠加试听见 [MixReview/Production.md](../MixReview/Production.md)。未归一化,菜单样例4倍过采样峰值-4.31dBFS且零越界;主观听感仍待确认。
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
# HybridCLR Gen All 与 WebGL 原生构建
|
||||
|
||||
## 2026-10-22 故障与处理
|
||||
|
||||
当前环境为 Windows、Unity 2022.3.62f3、HybridCLR 8.14.1。
|
||||
`HybridCLR/Generate/All` 在 `GenerateStripedAOTDlls` 内部调用 WebGL Player 构建。
|
||||
本次错误发生在原生工具链,C# 编译已通过:
|
||||
|
||||
- `clang++` 编译 `mscorlib.cpp`、`UnityEngine.CoreModule__4.cpp` 时退出,前者返回 `3221226505`,后者包含 LLVM Instruction Selection 崩溃信息。
|
||||
- 两个文件保持原来的 `-O3` 参数单独重编译均成功。
|
||||
- Bee 并发降为 4 后,全部 C++ 编译通过;随后独立线程池中的 `wasm-opt` 返回 `3221225477`。
|
||||
- 同一份 wasm 输入、同一优化参数在 `BINARYEN_CORES=4` 下单独处理成功。
|
||||
|
||||
上述证据支持限制构建并发作为规避措施,尚不能单独确定内存、硬件或工具链内部缺陷中的哪一项是根因。
|
||||
|
||||
## 项目处理
|
||||
|
||||
`AIClient/Assets/Editor/HybridCLR/WebGlBuildConcurrency.cs` 通过 Unity 构建回调处理 **Windows 编辑器中的 WebGL Player 构建**,包括标准 HybridCLR Gen All 内部的构建及微信导出:
|
||||
|
||||
- 未显式指定时,将当前进程的 `BEE_BUILD_THREADS`、`BINARYEN_CORES` 临时设为 `4`。
|
||||
- 保留开发者或 CI 已提供的环境变量值。
|
||||
- 成功后恢复环境变量;失败时通过编辑器空闲更新恢复,并在程序集重载前清理。
|
||||
- 保留既有 C++/wasm 优化参数,不修改 Unity 安装目录或 PackageCache。
|
||||
|
||||
Bee 的并发环境变量也存在于当前 Unity 自带的 `bee_backend.exe` 中;本次采样确认 clang 进程数最多为 4。
|
||||
Binaryen 对并发变量的说明见其[官方调试文档](https://github.com/WebAssembly/binaryen/wiki/Debugging)。
|
||||
|
||||
## 验证入口与记录
|
||||
|
||||
按项目 Unity Pipeline 流程编译后,执行:
|
||||
|
||||
```powershell
|
||||
unity command --timeout 900 run_script --file AgentScripts/VerifyHybridClrGeneration.cs --entry VerifyHybridClrGeneration.GenerateAll --timeout_ms 900000 --project-path D:/UD/AI/AIGame/AIClient
|
||||
```
|
||||
|
||||
该入口直接调用原始 `PrebuildCommand.GenerateAll()`,不自行设置线程环境变量,也不跳过步骤;检查 AOT DLL、生成文件及环境变量恢复。
|
||||
成功回执写入 `Tools/output/hybridclr_genall/generate_all.json`。
|
||||
|
||||
本次标准流程于 2026-10-22 16:35(北京时间)通过,耗时约 295 秒:生成 55 个 AOT DLL,`MethodBridge.cpp`、`UnityVersion.h`、`link.xml`、`AOTGenericReferences.cs` 均为本轮更新,环境变量已恢复,生成后的 C# 编译通过。
|
||||
`VerifyHybridClrGeneration.VerifyCallbacks` 另行验证了默认并发、成功清理、显式覆盖值保留和失败后空闲清理,全部通过。
|
||||
|
||||
辅助工具 `Tools/diagnose_webgl_clang.py` 和 `Tools/diagnose_webgl_wasm_opt.py` 从 Editor.log 提取失败命令,将重放输出写入 `Tools/output/hybridclr_genall/`,不修改 Unity 的构建产物。
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 生产
|
||||
|
||||
Base: `https://game.xworld.ren`(Caddy → 后端)
|
||||
Base: `https://BuddyDefense.xworld.ren:15888`(Caddy → 后端)
|
||||
|
||||
## 本地 AIServer(推荐开发)
|
||||
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
|
||||
新增资源类型时:在本表增加一行,并新建对应 `Doc/ResDesc_<Type>.md`。
|
||||
|
||||
| `BudBud` 伙伴模型、动作和配方 | `AIClient/Assets/Bundles/Characters/Animal/BudBud/`、`Tools/output/companions/BudBud/`、`Config/Art/Companions/BudBud.json` | Blender 离线制作的芽芽 T1;模型 1804 tris、8骨同源 Idle/Walk/Attack,Unity 导入入口已准备,Editor 验收待连接。 |
|
||||
芽芽正式T1及原三动作已通过Unity验收;旧1804面/8骨程序化草稿已留档,正式战场采用2999面Studio版。来源见 [BudBud/ProductionBrief.md](Design/Character/BudBud/ProductionBrief.md) 与 [CompanionStudioBatch.md](Design/Character/CompanionStudioBatch.md)。
|
||||
|
||||
敌人攻击/受击特效与TangoFlux音效已制作并接入现有战场,登记见 [ResDesc_Effect.md](ResDesc_Effect.md) 和 [ResDesc_Sound.md](ResDesc_Sound.md);标准制作与验收入口见 [EnemyCombatFx/Production.md](Design/Combat/EnemyCombatFx/Production.md)。
|
||||
|
||||
大角首领Studio低模/UV完整试验及原22骨、原三动作复用已通过,见 [GreatHorn/StudioTrial.md](Design/Character/GreatHorn/StudioTrial.md)。试验版单独交付,正式GreatHorn保持原版。
|
||||
大角首领Studio低模/UV完整试验及原22骨、原三动作复用已通过,见 [GreatHorn/StudioTrial.md](Design/Character/GreatHorn/StudioTrial.md)。试验最初单独交付,后续已随五类Studio敌人替换正式战场;原版保留归档。
|
||||
|
||||
伙伴 Studio 低模批量(岩团团+9个)完成;岩团团、火喵、芽芽、闪闪雀、岩甲犀、藤蔓灵、雷鸣豹、潮汐鲸已替换战场正式模型(泡泡龟、烈焰狮保留原版),见 [CompanionStudioBatch.md](Design/Character/CompanionStudioBatch.md)。
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
## 五敌人战场替换与技能闭环样例(2026-10-21)
|
||||
|
||||
五 Studio 敌人已替换正式战场并实播通过;火喵/岩团团独立技能样例完成动作、特效、五条TangoFlux音效与 C++ 逻辑事件闭环。完整记录 [SkillSlice/Production.md](Design/Combat/SkillSlice/Production.md),分类型登记见 Model/Animation/Effect/Sound/Picture/Config。主线仍为旧规则,样例未接网络战斗协议。
|
||||
五Studio敌人已替换正式战场并实播通过;火喵/岩团团独立技能样例完成动作、特效、五条TangoFlux音效与C++逻辑事件闭环。完整记录 [SkillSlice/Production.md](Design/Combat/SkillSlice/Production.md),分类型登记见Model/Animation/Effect/Sound/Picture/Config。样例后续已推广到下节正式权威网络战斗,技能声音现已补齐9/9。
|
||||
|
||||
|
||||
## 权威技能协议与正式战场接入(2026-10-21)
|
||||
@@ -42,3 +42,7 @@
|
||||
### 2026-10-21 首日前五关验收
|
||||
|
||||
新账号、三只教学T1伙伴的1-1~1-5真实UI/权威轨迹验收通过,修复训练资源不足的引导和隐藏对象动画警告。截图登记Picture,首日事务测试/UI工具/七份JSON回执登记Config;结果见[FirstFiveAcceptance.md](Design/G3/FirstFiveAcceptance.md)。没有新增业务美术或玩法数值改动。
|
||||
|
||||
### 2026-10-22 收尾复核
|
||||
|
||||
五份技能/UI离线混音试听、浮点母带与技术回执已登记Sound,工具已登记Config;入口 [MixReview/Production.md](Design/Sound/MixReview/Production.md)。潮汐鲸T2已完成Studio低模/UV、400面512²挂件及正式战场验证,全量10/10,见 [TideWhale/T2/Production.md](Design/Character/TideWhale/T2/Production.md);Model/Picture/Animation/Config已补登记。
|
||||
|
||||
@@ -163,3 +163,65 @@
|
||||
## 权威技能协议与正式战场接入(2026-10-21)
|
||||
|
||||
正式战斗复用原10伙伴/5敌人的Idle/Walk/Attack,没有改写成品动画。BattleSkillPresentation读取各角色原配方attackImpact,经Pipeline持久化15项映射,将原Attack前摇/释放/后摇分段对齐权威tick;零前摇护盾不强制跳到攻击中间姿势。AnimationEvent不决定伤害,旧规则继续原Animator播放。
|
||||
|
||||
|
||||
## 潮汐鲸T2复用原动作(2026-10-22)
|
||||
|
||||
`TideWhale_T2.prefab`沿用TideWhaleStudio的原22骨Avatar与TideWhale控制器、Idle/Walk/Attack,不新增或修改动作资产。400面贝壳冠绑bone_4,三段动作各121帧采样中挂件相对头骨变换恒定;第20关权威轨迹验证Attack、水罩、暂停和2倍速。来源与回执 `Doc/Design/Character/TideWhale/T2/`。
|
||||
|
||||
|
||||
## 营地向导站立与行走(2026-10-23)
|
||||
|
||||
`AIClient/Assets/Bundles/Characters/Human/CampGuideStudio/Anims/CampGuideStudio_Idle.fbx` 与 `CampGuideStudio_Walk.fbx` 是 Kimodo 原地动作,重定向到上面的 33 根 Mixamo 骨。站立约 1.5 秒,是 T 字休息姿势上的轻微呼吸,手臂仍张开。行走约 1.5 秒,髋部位移被清掉,腿有交替迈步。Animator 参数 `Motion`:0=Idle、1=Walk,Root Motion 关闭。主界面 `ExplorerLocomotion` 按水平位移切换。验收图 `Tools/output/campguide_studio/review/`。
|
||||
|
||||
早一版 `CampGuide/Clips` 里由 `BuildCampGuide.Author` 手写的垂臂循环已不再被主界面使用。
|
||||
|
||||
同一段旧 BVH 重定向的结果在 `Tools/output/campguide_studio/rig_fixed/`。2026-10-23 又用同一句提示词让 Kimodo 重新生成,再套到 25 根固定 Mixamo 骨架上,文件在 `Tools/output/campguide_studio/rig_fixed/kimodo_regen/`。那一版站立仍是张开手臂,行走双脚离地。
|
||||
|
||||
随后把 SOMA 骨架贴到同一网格并蒙皮,Kimodo 重新生成的站立和行走按同名关节直接套上,骨轴夹角为 0。文件在 `Tools/output/campguide_studio/rig_soma/kimodo/`。站立变成垂臂站立,行走有交替迈步和摆臂。部分帧仍把后脑和手指拉裂,所以没有替换主界面剪辑。
|
||||
|
||||
### SOMA 手部权重隔离试验(2026-10-23)
|
||||
|
||||
- `Tools/output/campguide_studio/rig_soma/audit/hand_cleanup/{Idle,Walk}.{glb,fbx}`:原 BVH、原 `_apply_bvh.py` 烘焙到仅清理手部权重的网格,便于控制变量比较;各 45 帧、30fps,保留原来的 Hips 清零行为。未作为正式动作导入 Unity。
|
||||
- `Tools/output/campguide_studio/rig_soma/audit/control/Walk.{glb,fbx}`:原 `skinned.glb` 重新烘焙的对照件,复现原 Walk 的 11.254 倍最坏边拉伸,排除本轮脚本重跑差异。
|
||||
- 同一套骨架姿态下,手部有效边的最坏拉伸 Idle 6.064→1.763、Walk 11.254→2.115。统计排除静态长度小于身高 0.2% 的边;不是穿插、体积或整体动作质量评分。全身最坏值仍为 Idle 2.593、Walk 6.426,主要残留在颈部。
|
||||
- 原 Walk 左上臂首尾局部旋转相差 76.63°,右大腿 45.26°,不能直接视为无缝循环;原 BVH Hips 世界高度变化约 0.061m,而当前烘焙将 Root/Hips 全部位移清零。下一轮应保留按角色比例缩放的垂直起伏,移除水平净行程,并单独做支撑脚接地与周期截取。
|
||||
|
||||
### Mixamo 网站动画离线审计(2026-10-23)
|
||||
|
||||
- 用户提供 `AIClient/Assets/Bundles/Characters/Human/test/Boy_mixamo/CampGuideStudio@{Walking,Breathing Idle,Happy Idle}.fbx`,三份均为无网格的 41 骨动画,30fps。分别为 1–32、1–299、1–61 帧,首尾时间跨度 1.033/9.933/2.000 秒。本轮没有生成或改写动画资产。
|
||||
- 原绑定 FBX 和动画 FBX 经 Blender 导入后的休息姿态与朝向不同。离线审计按同名骨骼的动画世界姿态应用到原绑定网格,保留原网格绑定矩阵,避免直接复制局部旋转;这不是 Unity Humanoid 实播验收。
|
||||
- 逐原始帧蒙皮采样:Walking 全身最大边拉伸 2.029 倍,手部 1.547、颈部 1.427;Breathing Idle 全身 1.668,Happy Idle 1.778。Walking 超过 2 倍的边每帧最多 1 条,位于裆部;两种 Idle 没有超过 2 倍的有效边。统计排除静态长度小于身高 0.2% 的边,不能单独代表体积、穿插或动作审美。
|
||||
- Walking 与 Breathing Idle 首尾各关节局部旋转误差在本轮浮点精度下为 0;Happy Idle 最大约 0.377°。Walking 同时保留约 0.954m 的前进位移,源模型尺度下约 0.923m/s,骨盆上下变化约 0.042m。若角色由游戏逻辑移动,需处理水平行程并按实际角色缩放匹配步速,不应把骨盆垂直位移一并清零。
|
||||
- Walking 蒙皮后全身最低点为 -5.52~3.84mm,SOMA Walk 为 2.87~37.96mm;只是离线接地参考,不等于严格的零滑步验证。明细与局部旋转、关节轨迹见 `Tools/output/campguide_studio/mixamo_audit/comparison.json`。
|
||||
|
||||
### TokenRig 固定 41 骨的同动作评审件(2026-10-23)
|
||||
|
||||
- `Tools/output/campguide_studio/rig_mixamo41/animations/{raw,local}/{Walking,Breathing_Idle,Happy_Idle}.glb`:6 个包含网格、41 骨与烘焙动画的离线预览件;原始 TokenRig 权重与仅清理手部跨部位影响的版本,各复用同一组用户提供的 Mixamo 动作。30fps,帧范围分别 1–32、1–299、1–61。保留源动作水平行程、垂直起伏与首尾姿态,没有重新生成动作。
|
||||
- `Tools/model_tools/bl_bake_tokenrig_mixamo41.py` 按同名骨世界姿态逐帧烘焙;`bl_verify_tokenrig_mixamo41_exports.py` 对 6 个 GLB 重导入,核对帧数和各区域最大拉伸,均与源评估相差小于 0.001。清单 `animations/manifest.json`,验证回执 `export_verification.json`。
|
||||
- 三段动作全身最大边拉伸(网站/原始 TokenRig/局部约束后):Walking `2.029/6.218/1.800`;Breathing Idle `1.668/3.415/1.710`;Happy Idle `1.778/3.602/1.691`。统计排除静态长度小于身高 0.2% 的边;只代表当前网格、当前三段动作的离线形变结果,未替换正式动画或验证 Unity 播放。
|
||||
|
||||
### Unity 同动作蒙皮观看场景(2026-10-23)
|
||||
|
||||
- `AIClient/Assets/Review/CharacterAnimationLab/Generated/{Walking,Breathing_Idle,Happy_Idle}.anim`:Pipeline 生成的原生 Transform 动画,共用用户提供的三段 Mixamo 动作逐帧姿态,分别 32/299/61 帧、30fps;三版蒙皮采样同一个 Clip 和时间,没有重新生成动作或使用 Humanoid 重定向。
|
||||
- 场景 `AIClient/Assets/Review/CharacterAnimationLab/CharacterAnimationLab.unity` 支持同步播放、暂停、前后逐帧、拖动进度、0.25/0.5/1/2 倍速、原地循环与保留位移。原地模式移除首尾净行程,保留周期内骨盆摆动与起伏;源 FBX 未改写。
|
||||
- Unity 原生蒙皮 1176 帧次与离线数据核验通过;Play Mode 的动作选择、进度指针、速度、视角、灰模、手部聚焦、位移开关及 41 骨同步检查通过。回执 `Tools/output/campguide_studio/rig_mixamo41/unity_review/{unity_verification,unity_controls}.json`;未替换正式角色动作。
|
||||
|
||||
### LmGirl 复用原 Mixamo Walking(2026-10-23)
|
||||
|
||||
- `Tools/output/lmgirl_tpose_studio/rig_mixamo41/Walking_{raw,post,clean,clean_eps,local}.glb`:五版绑定网格与相同 Walking,32 帧、30fps;与原男角色相同的骨骼旋转,按目标休息姿态适配局部骨段位移,根位移/起伏比例约 1.2371。五份 GLB 重导入与源指标误差均小于 0.00013,见 `export_verification.json`。
|
||||
- Unity 直接引用既有 `AIClient/Assets/Review/CharacterAnimationLab/Generated/Walking.anim`,没有复制或修改旋转曲线。观看器新增可选的每骨平移偏移与比例,原男角色无该映射时行为不变,原场景控件回归通过。LmGirl 同时可播放原 Breathing/Happy Idle,当前量化逐帧验收只覆盖 Walking。
|
||||
- 五版共 160 次原生蒙皮采样通过,最大指标误差小于 0.000046;同一 Walking 资产引用、41 骨同步、21 控件、同比例原地位移移除均验证通过,回执 `rig_mixamo41/{unity_verification,unity_controls}.json`。局部约束版原尺度脚底最低点在 -10.6~23.7mm 范围,尚未处理脚底 IK/滑步;手掌刚性跟随手腕,不承诺独立手指动作。
|
||||
|
||||
### LmGirl 网站 33 骨的相同 Walking 对比(2026-10-23)
|
||||
|
||||
- 网站版继续采样同一个既有 Walking.anim 和同一时间,未使用源文件附带的动画。按源/目标休息姿态做世界旋转差映射,局部位移差先换到目标父骨坐标,再按身材比例缩放;保留网站 33 骨自身骨轴,不直接照抄男角色骨轴下的局部旋转。
|
||||
- 网站版 32 帧 Walking 的原生蒙皮与独立矩阵 LBS 参考核验通过;本轮也验证 22 个播放/逐帧/进度/视角/材质控件和四版独立聚焦。完整量化仍只覆盖 Walking,其余两段动作做播放控件验证。
|
||||
|
||||
### LmGirl Walking 脚部轨迹重定向修正(2026-10-23)
|
||||
|
||||
- 新原生剪辑 `AIClient/Assets/Review/CharacterAnimationLab/LmGirl/Generated/Walking_LmGirl41.anim`、`Walking_LmGirlMixamo33.anim`:源仍为男孩 Walking 的 32 帧、30fps,但针对目标髋宽、髋到脚踝高度比例重定向源动作的骨盆相对脚踝轨迹,使用源膝盖方向做双骨 IK,保持目标大腿/小腿长度和原映射脚部朝向。腿部目标旋转重新求解;男孩原 Walking.anim 与其他源剪辑未修改。这两份目标剪辑取代了此前仅缩放骨段并照搬角度的女孩行走适配。
|
||||
- 生成入口 `Tools/model_tools/bl_diagnose_lmgirl_gait.py`(诊断、correct、export、verify-exports);映射及姿态样本 `Tools/output/lmgirl_tpose_studio/rig_mixamo41/gait_correction.json`。每步目标无法完全到达的最大距离约 TokenRig 0.57mm/网站 1.76mm,按固定腿长限制到可达范围。
|
||||
- `Tools/output/lmgirl_tpose_studio/rig_mixamo41/Walking_{raw,post,clean,clean_eps,local}_corrected.glb`:五版同修正步态外部预览件;源静态 .blend、绑定 .glb 和旧 Walking_*.glb 未覆盖,旧件用于未修正基线。5 件重导入核验通过,见 `gait_export_manifest.json` / `gait_export_verification.json`。
|
||||
- `AIClient/AgentScripts/VerifyLmGirlGait.cs`:32 原帧目标姿态误差最大约 0.00000048m,120Hz 扫描四版共 500 个样本未发现脚踝跨线;网站最小间距约 0.0863m,TokenRig 各版约 0.0959m(原尺度)。腿段长度漂移小于 0.00000051m。修正动作上 192 次原生蒙皮采样也与独立 LBS 参考通过;局部约束版最大有效边拉伸仍约 1.903。回执 `unity_gait_verification.json`。
|
||||
- 本轮修复落脚宽度/交叉,不含地面接触锁定或零滑步求解。局部约束版原尺度脚底最低点约 -14.5~13.8mm;原生源 Walking 与未修正参考数据仍保存。`summary.json` 已区分 baseline 与 active 指标,不再声称女孩行走直接采样未变的同一动画资产。
|
||||
|
||||
@@ -266,3 +266,147 @@
|
||||
## 擐𡝗𠯫�滢��喲��嗅極�瑕��墧�嚗�2026-10-21嚗�
|
||||
|
||||
`AIServer/tests/first_day_tests.cpp`嚗𠸖Test `first_day_progression`嚗𡁏鰵韐血噡�笔�鈭见𦛚�刻��滢��喳��滚��𡁜�嚗𣬚𡠺蝡衤葩�貶QLite銝𤾸虾瘜典�瘚贝��園�嚗峕�韏��嚗𤩺𥅾�㚁��𡁜��嗆���蝵柴��AIClient/AgentScripts/VerifyFirstFive.cs`嚗�18085�𠉛氖�滚𦛚銝羓��笔�UI���撖潦��𢆡�餌��賢𪂹�笔�靽桀��𤾸��䀹��伐�颲枏枂`Tools/output/first_five/`���隞賡�朞���SON�渡��訢Doc/Design/G3/FirstFive/`嚗ói_run��erver_run��arity��i_guide��nimation_lifecycle��ostfix_battle��leanup嚗㚁�雿靝蛹�臬�撉灷3霂�旿嚗䔶��㰘蝸銝箇焵瘜閖�蝵柴��秩�舘�`Doc/Design/G3/FirstFiveAcceptance.md`��
|
||||
|
||||
|
||||
## ���踝�UI 瘛琿𨺗霂訫𨯬撌亙�嚗�2026-10-22嚗�
|
||||
|
||||
- `Tools/build_audio_mix_review.py`嚗𡁜蘨霂餅迤撘誩ㄟ�喳�蝚�20�袍2���頧刻蕨嚗峕�Pipeline��㺭撖澆枂�𨅯�UI��9���賬��1�嚗�2��䀹��𠰴��惩��𥡝��穿�璅⊥�8嚗�8�單����cast�駁���75ms�䔶犖靽脲擪銝𤾸��喲�嚗諹���48kHz PCM16�𦠜筑�寞�撣佗����嚗誯妟�𦠜郭璉��乓��氖蝥輸�撱箔�蝑匧�Unity摰𧼮��碶蜓閫���嗚��
|
||||
- `AIClient/AgentScripts/ReviewAudioMix.cs`嚗䥪ipeline�芾粉Snapshot嚗嗬ecovery嚗𥡝扇敶閙迤撘㶿refab�單���㺭銝𤾸僕��Boot�嗆����仃韐亦�AudioRenderer敶閖𨺗�亙藁撌脩宏�扎��
|
||||
- `Doc/Design/Sound/MixReview/`嚗�5蝏�AV嚗𤩺筑�寞�撣血�鈭衤辣����亥��箏�撣䎚����舫�霂���nity��㺭�峕�憭䃸SON嚗𥕦ㄟ�喳歇�餉扇Sound��
|
||||
- 瞏格�斢禁2撌脰繮�湔𦻖���撟嗅��𠩐tudio雿擧芋嚗𦶥V銝擧迤撘𤩺𦻖�伐�撉諹�銝擧䔉皞鞱� `Doc/Design/Character/TideWhale/T2/Production.md`��
|
||||
|
||||
|
||||
## 瞏格�斢禁2 Studio�嗅偏撌亙�嚗�2026-10-22嚗�
|
||||
|
||||
- `Tools/studio_accessory_pipeline.py`嚗𡁻����隞嗡��沒tudio�脲郊�𤘪�嚗喹tudio UV�鍦笆朣琜��条��坿�憸��30%�滢��䉠V�誯𢒰�𣜿Pbr�枏�嚗𥕢��见極�䉠nity摨誩��𤥁�鈭扳�meta��
|
||||
- `Tools/model_tools/bl_audit_t2_accessory.py`嚗𡁻�璅∴��𣂼��𥕦�皜脫��𦠜��䤪V嚗誩�雿訫恣霈~��
|
||||
- `AIClient/AgentScripts/BuildT2Visuals.cs`嚗𡁏鰵憓絚uildTideWhale嚗苐pplyTideWhale�𣂼�Hero9嚗㲋erifyComplete銝交聢閬�����T2朣𣂼�嚗𥕦��券��亙藁蝏抒賒�舐鍂��
|
||||
- `AIClient/AgentScripts/VerifyTideWhaleT2.cs`嚗�400�U��512簡韐游㦛���撉冽沲嚗誩𢆡雿栶��363撣批��折��其�甇������䀹�fixture嚗偦妟�齿��斤㦛銝擧��齿��格𤫇�����甅嚗峕���翰餈𥡝歲餈���笔�擐���㰘揭�瑁窈瘙���
|
||||
- `Doc/Design/Character/TideWhale/T2/{production,unity_assets,unity_battle,unity_finish}.json`嚗𡁏䔉皞𣂷遙�!D嚗𤩺��曉�璅∪��𦠜鰵韏�������57憿孵�韏��靽脲擪���鈭改�摰墧�嚗𤩺𤣰撠曉��扼��
|
||||
|
||||
## �曄�撟喳蝱�讠憬撖澆�閫��嚗�2026-10-22嚗�
|
||||
|
||||
- `AIClient/Assets/Editor/TexturePlatformPostprocessor.cs`嚗𡁏��� Editor 撖澆�憭���剁�`Assets/` 銝见㦛��紡�交��齿鰵撖澆��嗅鍳�典像�啗��吔�Windows嚗㇎nity �� `Standalone` 蝏��雿輻鍂 DXT5嚗𢁾OS嚗ǑiPhone`嚗劐� Android 雿輻鍂 ASTC 6�6嚗𡦀ebGL 雿輻鍂 ASTC 8�8嚗𥕦��� Crunch嚗䔶��坔�隞硋紡�亙��啜���銝餃𢆡�寥��齿鰵撖澆�撌脫��曄�嚗䔶�憭�� `Packages/` 韏����
|
||||
|
||||
## �芸𢆡 UI �暸�蝘餅�嚗�2026-10-22嚗�
|
||||
|
||||
- `AIClient/Assets/Editor/UI/UiSpriteAtlasGenerator.cs`嚗𡁜��� ClientTrunk �� SpriteAtalsGenerator嚗屸�朞� Unity API �� Texture �桀�憓鮋���� SpriteAtlas嚗�紡�伐�憓𧼮�嚗讐宏�刻䌊�函輕�歹�靽萘� GUID嚗峕��仿��㵪�皜���厩��鞉�蝑曄�憭望��暸���
|
||||
- `AIClient/Assets/Editor/UI/UiAtlasBundleRules.cs`��SetupUiBundleCollector.cs`嚗𡁻��� YooAsset 3.0.6 ��㦛�� Main嚗誩��� Depend �園��其� PackUiAtlas ���閫��嚗𡩅rt ��遣�亙藁撌脫� Setup 靚�鍂��
|
||||
- `AIClient/Assets/HotUpdate/Scripts/UI/UiAtlasPaths.cs`��UiAtlasLoader.cs`��UiManager.cs`��UiPrefabLoader.cs`嚗𡁜��刻楝敺��撠���tlasRequested 撘�郊蝏穃���僎�穃�撟嗚��prite �钅�蝻枏�嚗𤩺�����冽��揢�橘�靽萘� JSON�柹refab ����曉��典�銋嘥悍�潸器�䎚��
|
||||
- `AIClient/AgentScripts/VerifyUiAtlases.cs`嚗䥪ipeline 蝻𤥁��函��琜�GUID嚗茚order嚗誩����撱箸�撠���䌊�典��删宏�其��祉�韏�����蝛箏㦤�航�銵屸�霂��颲枏枂 `Tools/output/ui_atlas/`嚗䔶�閬��甇�� CDN嚗莅treamingAssets��
|
||||
- `Doc/UI_Atlas_Pipeline.md`嚗𡁶宏璊齿䔉皞僐��𤌍敶𤏪��讠憬嚗𤩺�����㰘蝸銝𡡞�霂��蝔页�`Doc/UI_AutoGen_Overview.md`��Doc/Rule/UnityUIProject.md` 撌脣�甇亦緵銵諹��踺��
|
||||
|
||||
## UI �暸��笔㦛�𡝗��讠憬嚗�2026-10-22嚗�
|
||||
|
||||
- `AIClient/Assets/Editor/TexturePlatformPostprocessor.cs`嚗䫤Assets/Bundles/UI/Texture/` 銝见㦛����曆蝙�� RGBA32嚗𦶥ncompressed嚗���� Crunch �� Standalone嚗蒨Phone嚗苐ndroid嚗菁ebGL ����曇��吔��桀�憭硋㦛��誧蝏剜��笔像�啗��坔�蝻押��迨閫���蹂誨�滩膩�𨅯㦛��像�啣�蝻拙紡�亥��仮�嘥笆 UI �笔㦛�������
|
||||
- `AIClient/AgentScripts/VerifyUiAtlases.cs`嚗𡁏鰵憓� ApplyUncompressedSources嚗屸�摰帋�餈啁𤌍敶閙鸌�讛�蝘餃歇�匧紡�亥挽蝵殷�撟園�霂���曆蛹 RGBA32���蝘餃�蝑剹��UID嚗譍�摰急聢颲寧�靽萘�嚗𡻈ditor嚗苐utomaticChanges 銵亙��笔㦛銝滚�蝻拇��乓���朞� unity-pipeline 靚�鍂嚗䔶��见� meta��
|
||||
- ��蝏� SpriteAtlas 靽脲� Windows DXT5��OS嚗苐ndroid ASTC 6�6��ebGL ASTC 8�8嚗𥕦��滩��躰� `Doc/UI_Atlas_Pipeline.md`���蝘餃��� `Tools/output/ui_atlas/source_uncompressed.json`��
|
||||
|
||||
## �暸����銝𤾸��曉�蝝惩竉蝳颱耨憭㵪�2026-10-22嚗�
|
||||
|
||||
- `AIClient/Assets/Editor/UI/UiSpriteAtlasGenerator.cs`嚗𡁏�憭滚���極蝔讠� Include in Build=true嚗𤤿&靽嘥��� SBP PackAllAtlases 銝� StripUnusedSpriteSources 甇�&�唾��暸�撟嗅竉蝳餅��曉�蝝𨬭����曉紡�乩�銝箸𧊋�讠憬 RGBA32嚗峕�蝏�㦛��像�啣�蝻拐��塩��
|
||||
- `AIClient/AgentScripts/AuditUiAtlasBundle.cs`嚗䥪ipeline �芾粉摰∟恣�笔� bundle ��之撠譍�皞� Texture2D嚗𢦓erification 撖寞��蹱�蝥寧��仿���唂 Home Art �� 3,044,323 摮𡑒�嚗�16 撘� RGBA32嚗䔶耨憭滚��𠉛氖撉諹��� 271,138 摮𡑒�嚗�0 撘䭾� Texture2D嚗玺prite 16 銝芯��辷��墧� `Tools/output/ui_atlas/size/{production_before,verification_after}.json`��
|
||||
- `VerifyUiAtlases.Runtime` 憓𧼮�摰鮋�蝥寧��䂿征�剛��� Home 憿菔扇敶𤏪�2048�1024��STC_8x8嚗𢥧I �笔�皜脫�嚗誩𢆡��揢�橘��𦠜𦆮�朞���ditor 796 憿寞��仿�朞���Doc/UI_Atlas_Pipeline.md` 撌脣�甇伐�甇�� Art ����齿鰵��遣�����
|
||||
|
||||
## 甇�� Art ��遣�找�韏𣇉�摮䀝耨憭㵪�2026-10-22嚗�
|
||||
|
||||
- `AIClient/Assets/Editor/UI/UiAtlasBuildValidation.cs`嚗𡁏覔�桀����撱箸𥁒�𢠃�𣂷葵�㰘蝸����暸� bundle嚗峕��交糓�行��坔虾�㰘蝸����� Texture2D嚗𥕢�撠�㦛���閫����遣�惩�閫�蛹�亦氖�𣂼�霂�旿��
|
||||
- `AIClient/Assets/Editor/YooAsset/BuildAndStageArt.cs`嚗𡁏�摮睃�憓𧼮�銝𡃏膩璉��伐��𤑳緵畾讠��園�朞�摰䀹䲮 BuildCache.PurgeCache(false) 皜�� SBP 蝻枏�嚗䔶誑�� `.atlasfix` ��𧋦�滩�銝�甈∴�隞滚仃韐亙�銝齿�摮塩��
|
||||
- `AIClient/AgentScripts/AuditUiAtlasBundle.cs`嚗朞‘����齿迤撘誩�摰∟恣���蝻枏�����湔迤撘𤩺�撱箝����嗵�摮条�甇��憓鮋���遣銝𤾸�����粹�霂���鍂�� ef703e9 ��蛹 2,932,774 摮𡑒�嚗�15 撘� RGBA32嚗𥟇迤撘� 20261022.142513��20261022.142810 �滚遣��蛹 Home 271,138 摮𡑒�嚗�0 撘䭾�蝥寧�嚗�16 銝� Sprite嚗䔶�銝芸㦛������皞鞟犒����𧋦�� StreamingAssets 銝� CDN 撌脣�甇伐��墧� `Tools/output/ui_atlas/size/production_guard.json`��
|
||||
|
||||
## HybridCLR Gen All �毺�撌亙��曉僎�𤏸��選�2026-10-22嚗�
|
||||
|
||||
- `AIClient/Assets/Editor/HybridCLR/WebGlBuildConcurrency.cs`嚗𡁏��� Unity Editor ��遣�噼�嚗𢫕indows WebGL ��遣�罸𡢿嚗䔶蛹�芣遬撘誯�蝵桃� Bee嚗茚inaryen 霈曄蔭 4 銝芸極雿𦦵瑪蝔页��𣂼�嚗誩仃韐亙��W�餈𤤿��臬�嚗𥟇��� Gen All 銝𤾸凝靽⊥�撱箏�鈭恬�銝齿㺿�䀝��硋��啜��
|
||||
- `AIClient/AgentScripts/VerifyHybridClrGeneration.cs`嚗𡁻�朞� Pipeline 靚�鍂�笔�摰峕㟲 GenerateAll嚗峕嵗撉� AOT DLL��‘�伐���𧋦嚗𦹃ink嚗𤩺��见��函��𣂼��臬��W�嚗𥕦��抒𤌍敶� `Tools/output/hybridclr_genall/`��
|
||||
- `Tools/diagnose_webgl_clang.py`��Tools/diagnose_webgl_wasm_opt.py`嚗帋� Editor.log �齿𦆮憭梯揖����毺�霂𡢅�隡睃��賭誘嚗�蘨�� Tools/output �坔�颲枏枂��Doc/HybridCLR_GenAll.md` 霈啣����霂�旿����輯��游�撉諹��寞���
|
||||
- 撉諹�蝏𤘪�嚗�2026-10-22 16:35 ���摰峕㟲 Gen All �朞�嚗�漲 295 蝘𡜐�嚗�55 銝� AOT DLL �𠰴�憿寧��鞉�隞嗅歇�湔鰵嚗𤤿��𣂼��� C# 蝻𤥁��朞�嚗峕����憭梯揖皜��銝擧遬撘讐㴓憓���碶��䠷�霂��朞���祕閫� "Tools/output/hybridclr_genall/generate_all.json"��
|
||||
|
||||
## 敺桐縑撠𤩺虜�誩紡�箏����擐硋� CDN �滨蔭嚗�2026-10-22嚗�
|
||||
|
||||
- `AIClient/Assets/Editor/WeChat/ExportWeChatBasePackage.cs`嚗𡁜紡�箏���� Base �嗥𤌍敶訫��𤏸��極�瑕����miniprogramRoot=minigame/嚗㚁�瘝輻鍂 SDK 蝻𤥁�嚗讐泵�瑟��日�蝵桀僎靽萘� AppID嚗𥕦��䭾唂��耨憭溻���雿� minigame �峕�����遣���蝵桀��啗��𨰻��
|
||||
- �臬𢆡 DATA_CDN �嫣蛹�唳��煺漣蝵𤑳� `https://www.xworld.ren/game/Friends/webgl/`嚗偦�朞� Pipeline �峕郊敶枏� MiniGameConfig ��紡�� game.js��𥁒�𠰴��� webgl 銝𠹺�皞鞟𤌍敶𨰻��𤌍�� URL ������撣屸����隞塚�銝滩䌊�其�隡㰘�蝡胯��
|
||||
- `AIClient/AgentScripts/VerifyWeChatExport.cs`嚗𡁶緵�匧紡�箏��瑟鰵撉諹��朞�嚗峕��亙�����ppID��DK �㘾膄閫������厰�蝵殷�韏��靽萘��𠰴�蝑㗇�改��墧�銝𦒘耨�孵�憭�遢 `Tools/output/wechat_export/`��
|
||||
- `Doc/WeChat_Export.md`嚗𡁜紡�亙�蝥扼��DN ��辣�惩�銝� 404 憭��霂湔���𧋦甈∪鍳�冽�隞嗡蛹 1ddb5fcad4415dd3.webgl.data.unityweb.bin.txt嚗�10,084,442 摮𡑒�嚗㚁��煺漣�啣�摰墧� 404嚗屸�銝𠹺� webgl �桀���捆嚗���芸�撣��蝡胯��
|
||||
## YooAsset �滚���辣蝟餌����惩遆�啗��芯耨憭㵪�2026-10-22嚗�
|
||||
|
||||
- `AIClient/Assets/AOT/link.xml`嚗𡁏��� linker 閫��嚗𣬚移����� WebNetworkFileSystem嚗茚uiltinFileSystem嚗莅andboxFileSystem �惩����惩遆�堆��祉�鈭� HybridCLRGenerate/link.xml嚗灷en All 銝滩��吔�銝滚��譍��� YooAsset��
|
||||
- `AIClient/AgentScripts/VerifyYooAssetStripping.cs`嚗𡁻�朞� Pipeline 霂餃�摰峕㟲銝舘��� DLL嚗屸��唳迤撘誩紡�箏�皜豢�嚗峕瓲撖寞��惩遆�堆��寞�雿枏��毺�隞��嚗�僎瘥磰�擐硋� data 銝𦒘��� bundle ��捆�������芸��墧�撌脩&霈支�蝘滨掩�见�摮睃銁�������惩遆�啣銁�扯��� DLL 銝剖�銝W仃��
|
||||
- `Doc/WeChat_Export.md` 銵亙��笔�����躰��坔�撉諹��亙藁嚗𥕦��� `Tools/output/yooasset_stripping/`��
|
||||
- 甇��摨訫�撖澆枂銝𦒘漣�拚�霂��朞�嚗帋�蝘齿��惩遆�啣��寞�雿枏�靽萘�嚗𡦀ebNetwork �毺����惩遆�啣歇���嚗𥕢��� bundle ����券��芸���鍳�� data 摰墧� +93 摮𡑒�嚗峕鰵��辣 c58ae17711192f12.webgl.data.unityweb.bin.txt嚗�10,084,535 摮𡑒�嚗剹��𧊋銝𠹺�餈𦦵垢嚗�凝靽∟�銵��敺��瘚卝��
|
||||
|
||||
## 銝餌��Y宏�函垢�曄內銝𤾸��典躹靽桀�嚗�2026-10-22嚗�
|
||||
|
||||
- `AIClient/Assets/HotUpdate/Scripts/Gameplay/GameplayBootstrap.cs`嚗𡁜�甇W鍳�冽𧒄�芸𢆡�𥕦遣 TownSquareSpawner嚗𠸖haracterSpawner嚗䔶��㰘蝸 TownSquare嚗𠸖aoCao嚗𥕦�韏���𦠜��堒㦤�舀����亙藁靽萘���
|
||||
- `AIClient/Assets/Bundles/UI/Material/HomeExplorerCutout.mat`嚗䥪ipeline �𥕦遣����脤�閫��摨閙�韐剁�`UI_MainHUD.json` �朞��唳𣈲��� RawImage.material �曉�撘閧鍂嚗玺hader �� Prefab 靘肽��枏�嚗屸��滩�銵峕𧒄 Shader.Find �曆��啣紡�湔楛�脩畆敶U��omeExplorerPresenter �鞱��芸停蝏迎��䭾��鞱捶憸��撟園��� RT嚗愢ainHudView 靽萘��a埯摰嗉䌊撌梁��孵稬蝏穃���
|
||||
- `AIClient/Assets/AOT/Scripts/UI/UiSafeArea.cs`��Assets/Plugins/WebGL/UiSafeArea.jslib`��Assets/AOT/link.xml`嚗朞挽憭���典躹嚗见凝靽∠�����典躹嚗讛��𦠜��桀�颲寥���嚗峕��餉��讐�敶雴��吔�250ms 蝻枏�嚗𥕦��峕艶�典�嚗��撅��厰��寥�霈拚▲�剁�摨閖����隞嗥� JSON ��� Prefab嚗�僎�祉�靽萘��踹� AOT 鋆����
|
||||
- `JsonUIPrefabBuilder.cs`嚗𡁜��� RawImage.material嚗𥕢耨甇�蕭�� assets.sprites �曉�頝臬���䔮憸矋�憯唳�韏��蝻箏仃�仿���蜓�屸𢒰�峕艶�峕郊�啁緵�� `Assets/Bundles/UI/Bg/home_camp.png`嚗峕𧊋�W��批㦛��𤌍敶蓥�����舀�隞嗚��
|
||||
- `AIClient/AgentScripts/VerifyHomeMobileUi.cs`��Tools/verify_ui_safe_area.js`嚗𡁜���鍳�典膥�� 3D 憸��頧賬��PU �惩�����桀𦶢銝准����脣蝱霂滚��桅�𡄯��䀹絲嚗贝��𠺪�摰匧��踹�撉諹�嚗�8 蝏�凝靽⊥𦻖���DPR嚗𤩺唂�亙藁�鮋��璉��仿�朞���⏛�曉��墧� `Tools/output/home_mobile/`��
|
||||
- �砍𧑐 Art 銝𡒊��� Raw 撌脫�撱箸�摮矋�Art 皜�� da695d302e502d813754738cc4b22de8嚗㷉efaultPackage 皜�� c65f553cbbac36cde3c2ac326438376c����� Art ��遣�亙�蝖株恕銝餌��V�韏𡝗�韐具��hader 銝� Bg �峕艶嚗𥟇𧊋�穃�餈𦦵垢��- ��蝏��撱綽�20:49 �啣���紡�箸�����毺��� JS 獢交𦻖����恬�擐硋� e33b1380f2e627d5.webgl.data.unityweb.bin.txt嚗�14,785,194 摮𡑒���㮾撖嫣�銝� Art ��遣隞� 3 銝� bundle �睃�嚗𤤿��游� 1 銝� rawfile �睃�嚗屸�憟埈��閖��穃��湔鰵��榆撘���� `Tools/output/home_mobile/deployment.json`嚗屸�閫����遣�墧��𣬚𤌍敶𤏪��� Boot �箸艶�W�嚗峕𧊋銝𠹺� CDN嚗�凝靽∪極�瘀���㦤敺��瘚卝��
|
||||
|
||||
### 2026-10-22 撠𤩺虜�讐�蝏靝�銝餌��W停蝏芣𨘥��
|
||||
- `AIClient/Assets/AOT/Scripts/Boot/WebSocketBridge.cs`��AIClient/Assets/Plugins/WebGL/GameWebSocket.jslib`��AIClient/Assets/AOT/link.xml`嚗𡁏鰵憓𧼮ㄢ撅� WebSocket 獢交𦻖�䔶��躰��辷�敺桐縑 SocketTask��芦�𡁏�閫�膥�鮋����TF-8 摮㛖泵銝脰��硺�餈墧𦻖�𦠜𦆮��
|
||||
- `AIClient/Assets/HotUpdate/Scripts/Net/WsClient.cs`��GameNet.cs`嚗阳ebGL 銝滚�雿輻鍂 ClientWebSocket �仿��牐�嚗𥕦��㰘��嗚��䌊��/�见𢆡�滩�嚗峕嵗撉��撣��蝏𨅯𧑐��撟嗅�甇乩��∩�銝𧢲���
|
||||
- `AIClient/Assets/AOT/Scripts/Boot/BootContext.cs`��BootDriver.cs` 銝� `GameplayBootstrap.cs`嚗帋蜓�屸𢒰撘�郊撠梁貌�⊥�嚗峕𧊋撠梁貌靽萘��臬𢆡�桃蔗嚗�仃韐交遬蝷粹�霂胯����� UI 蝏抒賒雿輻鍂撌脫� JSON�柹refab 蝞∠瑪��
|
||||
- `Tools/verify_game_websocket.js`��Tools/Tests/WebSocket/`��AIClient/AgentScripts/VerifyMiniGameNetwork.cs`嚗麿S 獢交𦻖 8 �箸艶����� WebGL C# �嗆��㦤���蝡臬𧑐��閫�����蝳餃㦤�� UI 撠梁貌銝擧𧋦�唳�撱粹�霂����朞�瘚贝�嚗峕𧊋銝𠹺� CDN嚗𥕦��� `Tools/output/minigame_network/`嚗諹秩�� `Doc/WeChat_Export.md`��
|
||||
�祈蔭��蝏�𧋦�唳�撱箏歇�𣂼�嚗�漲 232 蝘𡜐�嚗����𤌍敶� `AIClient/Build/WeChat/Base/minigame/`�����㺭�� `06add2285b23eace.webgl.data.unityweb.bin.txt`嚗�14,785,694 摮𡑒�嚗㚁�DefaultPackage 皜�� `0e3722bbb19457d47bac35bbd4b516a7`嚗𣬚��湔�隞� `d34a46086ecefa40084479f551820a4e.rawfile`嚗�253,440 摮𡑒�嚗剹��rt 隞滢蛹 `006c201e92439eb03ae12d84b86f8fa6`嚗峕𧊋�塩��歇撉諹� 4 銝芸像�唳‘�亙��笔紡�乓��L2CPP 餈𥪜�摮㛖泵銝脤��整����� framework 銝剔�獢交𦻖��aw DLL ��捆�峕��� MD5嚗𥕦� Boot �箸艶�W�嚗𣬚�颲穃膥�𨀣迫銝𠉛�霂穃��僐��Tools/output/minigame_network/deployment.json` 蝏坔枂�鞉�隞嗆䔉皞�/URL嚗���穃�韏����辣嚗���穃��餌��祆��𤏪��芯�隡㰘�蝡荔��芸�敺桐縑��㦤�磰���
|
||||
### 2026-10-22 Windows Server �穃�����拇��亙藁�函蔡
|
||||
- `AIServer/deploy/windows/`嚗阳indows x64 �穃�霂湔�����唳𠯫敹堒鍳�具��ocal Service 撘��箄恣�雴遙�~����祉𤌍敶訫虾�扯���辣�𨀣迫���摨�/�湔�/�拇�/WebSocket 璉��亥��穿�隞亙� Caddy 蝡嗵�蝷箔����霈文蘨�穃𨯬 127.0.0.1:18080嚗䔶��X� Kestrel 撟嗅�嚗𥡝揭�瑚�摮䀹﹝���閧𡠺餈�宏��恣�雴遙�∪�鋆�銁�祆㦤隞�� WhatIf嚗䔶�靽格㺿�冽�蝟餌�隞餃𦛚��
|
||||
- `Tools/package_aiserver_windows.ps1`��Tools/verify_aiserver_release.ps1`嚗𡁜�雿靝��怎鍂�瑟㺭�桀��� ZIP嚗𤤿鍂�祉�銝湔𧒄 SQLite �唳旿摨㯄�霂�����摨誩��𡁏𧋦��elease 雿輻鍂 MSVC /MT嚗𩥇umpbin 蝖株恕隞��韏� KERNEL32��S2_32��crypt 蝟餌� DLL��
|
||||
- `AIServer/src/http_ws_server.cpp`嚗朞‘朣鞉𤣰�啣��剖葷�𡒊� WebSocket �喲𡡒�⊥�嚗𤤿�摰� ClientWebSocket 餈墧𦻖/�喲𡡒瘚贝��朞���4 憿� CTest嚗��憡���𨰜����賢�������~����亥�摨佗��券��朞���
|
||||
- �砍𧑐�穃���辣 `Tools/output/server_release/AIServer-Windows-x64.zip`嚗�972,407 摮𡑒�嚗㚁�SHA256 `1ed3b64c8319fa5335bf0223f3d840426b434d9dd65bf222305fbbe4a300251a`����� `smoke.json` / `deployment.json`嚗峕𧊋�函蔡蝥蹂���
|
||||
- `HomeExplorerPresenter.cs`嚗𡁶㮾�箸�撅讛𠧧�嫣蛹霂餃�撌脣�撣��韐� `_Key`嚗��摰寧瑪銝� Art �� (0.07,0.02,0.09) 銝擧鰵皞鞉�韐函�蝝怨𠧧嚗䔶��漤��剜凒撣賊��睃��脣枂�拙耦��VerifyHomeMobileUi.cs` / `VerifyPreviewDeployment.cs` �嫣蛹�其�����脤�霂� GPU 蝖桀� discard嚗峕��交唂/�唳�摨閗𠧧銝𤾸��臭��辷��𠉛氖憸���芸㦛�朞�嚗�� Boot �箸艶�W���
|
||||
- `PrototypeApi.cs` / `PrototypeFlow.cs`嚗𡁶焵瘜閙𦻖�� 404 �閧𡠺�鞟內�滚𦛚����舐鍂嚗䔶��蹱𧊋蝖株恕�滢�嚗𣬚宏�支漣��笆霂脲�銝剔��砍𧑐 AIServer 摰䂿緵靽⊥���鰵�剜凒�� `587e28dfd1f166d117eadd24afa8efa1`嚗淾rt �芸�嚗峕����齿�摨訫�嚗𢱌Tools/output/server_release/Client-CDN-Patch.zip` 銝� 5 ��辣憓鮋�����餌��祆��閙��𤾸�撣���
|
||||
### 2026-10-22 BuddyDefense �笔�銝� 15888 蝡臬藁
|
||||
- 甇��摰X�蝡� HTTP/�拇��啣�蝏煺�銝� `https://BuddyDefense.xworld.ren:15888`嚗𡦀S 璅⊥踎銝� `wss://BuddyDefense.xworld.ren:15888/ws?pid={pid}&token={token}`��BootSettings`��BootContext`��AuthApi`��GameNet`��SessionData` �𣬚�颲穃膥 Production �𨅯�撌脣�甇乓����游笆�批ㄢ��𧋦�箏𧑐��/�� game.xworld.ren 暺䁅恕�潸�銵諹�蝘鳴��峕𧒄靽萘��嗡��曉�餈𦦵垢�滨蔭嚗𤤿垢�嫘��誘�𣬚����摰鮋� DLL 摮㛖泵銝脫��仿�朞���
|
||||
- Windows �穃��𡁏𧋦暺䁅恕�滚𦛚蝡臬藁銝� 15888嚗𥟇鰵憓� `AIServer/deploy/windows/New-CaddySite.ps1`嚗�銁�滚𦛚�刻��怠��� IPv4 蝵穃㨃嚗𣬚��𣂼蒂 `bind` �� Caddy 蝡嗵�嚗䔶��嗵鍂�瑟�靘𤤿� transport http read_timeout/write_timeout 0��addy 蝏穃��䂿㴓�䂿��∴��滚𦛚蝏穃� 127.0.0.1嚗��憭硋�蝡臬藁 15888 ��𡠺蝡讠��砍歇摰墧��朞�嚗𤤿��𣂼膥隞���滨蔭��挾嚗䔶��芸𢆡靽格㺿蝥蹂� Caddy��
|
||||
- �唳�隞� `Tools/output/server_release/AIServer-BuddyDefense-15888.zip`嚗�973,946 摮𡑒�嚗㚁�SHA256 `3217cdab2e1ecf0f86a53654b6d0defd57f48a3751455e09bdd8b7d439191100`嚗𢱌Client-BuddyDefense-15888.zip` 銝粹�憟堒恥�瑞垢 5 ��辣�剜凒��ackVersion `d36750d301123c62fd6f673f324137a5`嚗淾rt �芸�嚗峕����齿�摨訫���𧋦�圈�霂�蝙�函𡠺蝡𧢲㺭�桀�嚗峕�蝥蹂��函蔡��
|
||||
### 2026-10-22 �滚𦛚摰㕑��擧嵗撉�
|
||||
- �冽��滚𦛚�典�擐��隞餃𦛚瘜典��𣂼�嚗䔶� BuddyDefense.xworld.ren 閫��憭梯揖嚗峕𧋦�� HTTP 15888 餈𥪜� 400��𧋦�啣��瑟�瘜閗圾�鞉鰵�笔�嚗𥕦歇霂瑟��穃𨯬�啣�銝舘�蝔贝��綽�蝡臬藁�删鍂���敺�鍂�瑞&霈扎��
|
||||
- `AIServer/deploy/windows/Install-StartupTask.ps1` 憓𧼮�摰㕑��漤�𡁻�/�臬��穃𨯬蝡臬藁�删鍂璉�瘚页���捂�𣬚𤌍敶� AIServer 撌脩�摰𡁶㴓�𧼮𧑐��嚗𥕦鍳�典�頧株砭 `/health` 撟園�霂� service/gameProtocol嚗�仃韐交�蝖格𥁒�辷�銝滚�隞�鐯霈∪�隞餃𦛚瘜典��𣂼��冽鱏�滚𦛚撌脣鍳�具��
|
||||
- �湔鰵�滚𦛚�� ZIP嚗����𧒄�湔� 20261022-230727嚗㚁��笔��滚𦛚�亙熒/�餃�/�嗆��/WebSocket��15888 �� IP 蝏穃�����砍僕餈鞱��朞����憭硋���遣蝡钅�𡁻�蝡臬藁�穃𨯬撉諹��脩��其遙�⊥釣���鋡恍獈甇U��𧊋�孵𢆡�祆㦤�𤥁�蝡舐�蝟餌�隞餃𦛚嚗峕𧊋�函蔡蝥蹂���
|
||||
### 2026-10-22 摰X�蝡臬�撣����
|
||||
- �齿活蝥蹂��詨笆隞滢��� `0e3722bbb19457d47bac35bbd4b516a7`嚗峕鰵 `d36750d301123c62fd6f673f324137a5` 皜�� 404嚗𥟇鰵 BuddyDefense �笔��冽𧋦�唬�閫��憭梯揖��恥�瑞垢隞滩挪�格唂皜豢��笔�嚗䔶��祆㦤 AIServer �臬𢆡�𣂼��臭��屸�蝵脩㴓����
|
||||
- �啣� `Tools/Publish-BuddyDefenseClient.ps1`嚗�虾����舀𧋦 `Tools/output/server_release/Publish-BuddyDefenseClient.ps1`嚗㚁����蝵𤑳� `/game/Friends/webgl/` ��������𤌍敶蓥�摰X�蝡� ZIP嚗峕��亦緵�厩��寞�霈啜����� MD5�����楝敺������� 4 銝芰��湔�隞塚��滚�摮鞉𤜯�X�餌��砍僎靽嘥� previous嚗𥟇𣈲�� WhatIf嚗𣬚㮾���摰寡歲餈��銝滚��方�皞僐��
|
||||
- 撌脖蝙�� Tools/output 銝剝�蝳餌�蝡嗵𤌍敶閙�霂� WhatIf 銝滚��乓����游�撣���rt 靽萘�銝𡒊洵鈭峕活�穃� 0 �䀹凒嚗���朞���𧊋銝𠹺��碶耨�寧瑪銝羓��對�蝑匧��冽��𣂷� www.xworld.ren �蹱���蝡坔���𤌍敶𨰻��
|
||||
### 2026-10-23 隞餃𦛚�X踎 TMP 摮鞱��寥��滢耨憭�
|
||||
- `AIClient/Assets/HotUpdate/Scripts/Gameplay/PrototypeFlow.cs`嚗䥪anel ���蝝W��� TMP_SubMeshUI 蝏�辣�㘾膄������皜脫�摮鞱��對��踹��峕�韐刻䌊�函��𣂼��滩��孵��� ToDictionary 撘�虜嚗𥕢��嗘��∟��寥��齿��伐�銝滢耨�� JSON/Prefab��
|
||||
- `AIClient/AgentScripts/VerifyPrototypePanelBindings.cs`嚗𡁻�朞� Unity Pipeline �券�閫�㦤�臬�靘见� 19 銝芯��⊿𢒰�選�撘箏�����湔鰵撟嗥鍂 TMP 撌亙��𥕦遣���摮鞱��嫘��耨憭滚� 19/19 憭滨緵�脩�嚗𥕢耨憭滚� 19/19 �朞�嚗諹��� 1029 銝� TMP 摮鞱��嫘���摮�/�厰僼/���蝏穃�����唳�瘣餃��笔�銝𡁜𦛚�滚��垍�嚗𥕢葩�嗅㦤�臬歇皜����
|
||||
- �剜凒�� `Tools/output/server_release/Client-TaskPanelFix-613942741fd3be253c86145d7451031c.zip`嚗�110201 摮𡑒�嚗玺HA256 `43b055d6e0a12b6e8b6fae7413ed7c7e317ca37a12e2610dd517bd89bf208cc1`嚗㚁�撟嗆凒�� `Client-BuddyDefense-15888.zip` / `Client-CDN-Patch.zip` �怠���眏 Unity BuildAndStage ���撟嗆�蝥蹂��桀��枏� 5 銝芣�隞塚�Raw DLL 銝𡒊�霂𤏸��箔��氬���隞� MD5 銝擧��� MD5 撌脤�霂���穃��𡁏𧋦�⊿�/WhatIf/�滚��穃�瘚贝��朞���
|
||||
- packVersion `613942741fd3be253c86145d7451031c`嚗𡩅rt 隞滢蛹 `006c201e92439eb03ae12d84b86f8fa6`嚗峕����湔鰵 Art �㚚�撱箏������撣���� `Tools/output/server_release/deployment.json`嚗𥟇𧊋銝𠹺�蝥蹂�嚗�凝靽∠垢���穃��𤾸�瘚卝��
|
||||
## Unity 閫坿𠧧�函𤫇撖寞�閫���箸艶嚗�2026-10-23嚗�
|
||||
|
||||
- UI �滨蔭嚗䫤Doc/UIPrefabCreater/UI_CharacterAnimationLab.json`嚗𣬚��𣂼膥 `Tools/build_animation_lab_ui.py`嚗𤤿�憿寧𤌍 JSON�柹refab 蝞∠瑪靽嘥��� `AIClient/Assets/Bundles/UI/Prefab/UI_CharacterAnimationLab.prefab`��1080�1920嚗���� Common 銋嘥悍�潔�銝剜�摮𦯀�嚗�21 銝芣��桀�餈𥕦漲�∪�銝箸�銋���找辣��
|
||||
- �批��𡁏𧋦嚗䫤AIClient/Assets/Review/CharacterAnimationLab/{CharacterAnimationLab,AnimationLabSeekBar}.cs`嚗𥡝��閗��� `Editor/CharacterAnimationLabMenu.cs`������甇交偘�橘��舀��滚�靘折𢒰�������冽�頧研���頧桃憬�整��斐��/�唳芋�������虫��刻澈/銝𡃏澈/�單�撅��刻�撖��蝛箸聢�剜𦆮���嚗�椰�喟悌憭湧�𣂼葷嚗峕㺭摮� 1/2/3 ��𢆡雿栶��
|
||||
- �箸艶��遣�峕瓲撉䕘�`AIClient/AgentScripts/{BuildCharacterAnimationLab,VerifyCharacterAnimationLab}.cs`嚗屸�朞� Unity Pipeline �扯�嚗𥕢葉�湔㺭�桐�撉諹��亙�雿滢� `Tools/output/campguide_studio/rig_mixamo41/unity_review/`����� `Tools/Characters/Open Animation Comparison` �枏��祉��箸艶��歇摰峕� Play Mode �找辣撉諹�銝� 1176 甈∪��蠘��桅��瑟瓲撉䕘��芸��交迤撘𤩺�撱箝��
|
||||
|
||||
## LmGirl ��𢆡雿𡏭��株�摰⊿�蝵殷�2026-10-23嚗�
|
||||
|
||||
- `Doc/UIPrefabCreater/UI_LmGirlAnimationLab.json` �� `AIClient/Assets/Bundles/UI/Prefab/UI_LmGirlAnimationLab.prefab`嚗𤤿��𣂼��� `Tools/build_lmgirl_animation_lab_ui.py`嚗�抅鈭𤾸�閫坿𠧧閫���� JSON 瘣曄�嚗�1080�1920��ommon 銋嘥悍�潦��21 銝芣�銋���厰僼���霈文�銝箏�憪钅�瘚卝���蝝惩�憭������函漲�麄��
|
||||
- `AIClient/AgentScripts/BuildCharacterAnimationLab.cs` �啣� `BuildLmGirl/OpenLmGirl`嚗屸�朞� Pipeline 靽嘥��箸艶��esh���韐具��refab嚗𥟇�撱箏�閬���格��箸艶�芸�頧踝�撟嗆嵗撉� SaveScene 餈𥪜��潘��踹�閬���諹楝敺�歇�枏��箸艶���銵峕綉�嗅膥�� Actor �啣��舫�匧像蝘餅�撠������脫��惩��嗅�摰嫘��
|
||||
- `AIClient/AgentScripts/VerifyLmGirlAnimationLab.cs` �其� 160 撣扳活�毺��嗵铜銝� Play Mode �滢�撉峕𤣰嚗𢱌Tools/Characters/Open LmGirl Animation Comparison` �枏��箸艶�𡒊� Play����笔���扇�������啣���蝏��霈箄� `Tools/output/lmgirl_tpose_studio/rig_mixamo41/{input_manifest,local_constraints,cleanup,summary}.json`��
|
||||
|
||||
### LmGirl 蝵𤑳�����𥕦�閫���滨蔭嚗�2026-10-23嚗�
|
||||
|
||||
- `Tools/build_lmgirl_animation_lab_ui.py` / `Doc/UIPrefabCreater/UI_LmGirlAnimationLab.json` �湔鰵銝箏��堒僎�鉝��22 �厰僼嚗𥟇鰵憓嫰�𦦵����嘅�����𡒊&蝵𤑳� 33 撉其� TokenRig 41 撉具���朞� JSON�柹refab 蝞∠瑪�湔鰵�� UI Prefab嚗峕瓷�㕑�銵峕𧒄�� UI��
|
||||
- `CharacterAnimationLab.Actor` �啣��舫�厩�隡烐�憪踵���頧祆�撠����蝝W�銝𦒘�蝘餃���蓮�g��扯��脫�霂交�撠�𧒄靽脲��蠘�銝箝�������阡��誩�雿躰��脩��潘��踹��餃��贝�餈𥕦��孵���BuildCharacterAnimationLab.BuildLmGirl` 靽嘥��𥕦�撣��嚗䈣VerifyLmGirlAnimationLab` 璉��亦�蝡� 5 敶勗���192 撣扳活�� 22 �找辣嚗𥕦��瑁��脫綉隞嗅�敶雴��朞���
|
||||
|
||||
### LmGirl 鈭文��蹂耨甇��閫���券�蝵殷�2026-10-23嚗�
|
||||
|
||||
- `CharacterAnimationLab.Actor.walkingClip` 銝箏虾�厩�摰峕㟲�格�甇交���颲𡢅�憟喳酋�𤤿�雿輻鍂摰��撌脫��瑕酋�㰘��𡝗𧒄靽萘��罸��瑁�銝箝��𤌍���颲穃歇�怎𤌍��爸畾萄像蝘餃��贝蓮嚗屸��瑟𧒄頝唾�鈭峕活撟喟宏/撉刻蓬���嚗𥕦��唬�蝘餌宏�斤誧蝏剜�閫坿𠧧瘥𥪯��扯���
|
||||
- `BuildCharacterAnimationLab.MakeClip` �舀����颲枏枂�桀�嚗䈣BuildLmGirl` �朞� Pipeline �嗡��格� 33嚗�41 撉典𢆡�餃僎靽嘥��箸艶撘閧鍂��VerifyLmGirlAnimationLab.Verify` �𡒊&�喲𡡒 walkingClip �交瓲撖孵��脩�摰𡁜抅蝥選�敶枏��剜𦆮憪踵����鍦�潛眏 `VerifyLmGirlGait.Verify` �祉��賊���戊摮� 22 �找辣����瑕酋�找辣�𧼮����朞���
|
||||
|
||||
### 撠讐琸摮� Animator 蝏穃�霅血�霂𦠜鱏嚗�2026-10-24嚗�
|
||||
|
||||
- `AIClient/AgentScripts/InspectBoyAnimator.cs`嚗𡁶� Unity Pipeline �芾粉���敶枏��㗇𥋘撖寡情�� Animator��vatar��綉�嗅膥�嗆����𢆡�餅𤩅蝥輻掩�见� ModelImporter �滨蔭嚗𥕢�靽嘥��碶耨�孵㦤�臬�撖澆�霈曄蔭��
|
||||
- `Tools/output/campguide_studio/animator_warning/inspection.json`嚗𡁜��滚�靘贝��剖��扼����瑕酋銝箸��� Humanoid Avatar嚗諹�� Common �桀� Walking嚗茚reathing Idle嚗艻appy Idle 銝劐葵 FBX ��蛹 Generic��umanMotion=false嚗𡩅nimator �笔� Binding warning �𡒊&��枂 Generic �脩瑪銝� Humanoid Avatar 蝏穃�撉券盲�脩���
|
||||
### LmGirl FBX 頧游�霂𦠜鱏銝𡒊𡠺蝡衤�隡惩��穿�2026-10-24嚗�
|
||||
|
||||
- `Tools/model_tools/bl_audit_lmgirl_fbx_axes.py`嚗𡁻�朞� Blender FBX 鈭諹��嗉圾�𣂼膥霂餃� GlobalSettings����孵��U���憪钅▲�孵�暺䁅恕撖澆��𡒊�銝𣇉���凒�𡜐��墧� `Tools/output/lmgirl_tpose_studio/mixamo_upload/axis_audit.json`��
|
||||
- `Tools/model_tools/bl_fix_lmgirl_mixamo_upload.py`嚗帋���笆霂亙��� Y-up 蝵烐聢嚗峕�憭� Blender Z-up �𤾸��典��g�隞� bake_space_transform=True 撖澆枂��� Y-up FBX嚗𥕢�靽格㺿�𡁶鍂撖澆枂�冽���蟮��辣���霂���寞�頧穿�蝻拇𦆮��V��▲�對�銝㕑��X㺭��-up �牐�霂臬榆�𢠃��啣紡�亙�����������墧� `Tools/output/lmgirl_tpose_studio/mixamo_upload/repair.json`�����辣 SHA256 `75a1cfcc26e2f106427ffb049ad38a8124dc9c342ab6196360b4aaa9adff431e` 靽脲�銝滚���
|
||||
### Studio 鈭娍郊�� FBX �嗅偏���鞾𧫴畾菜瓲�伐�2026-10-24嚗�
|
||||
|
||||
- `Tools/model_tools/bl_audit_lmgirl_stages.py` �� `Tools/output/lmgirl_tpose_studio/axis_pipeline_audit/stages.json`嚗𡁻�𣂷�璉��仿�璅~��tudio 雿擧芋��V��笆朣僐����踺��� UV �誯𢒰���蝏� GLB����� static嚗菓Pbr �𠹺耨甇���箝���甇� GLB �券�蝡嗵�嚗屸�甈⊿�霂臬銁�𡒊賒�蹱�� FBX 撖澆枂嚗���� XPbr 靽萘��躰秤��
|
||||
- `Tools/model_tools/bl_decimate.py`嚗𡁜��� `export_fbx_source_yup` v2 �其葩�嗅��祆�銵����蓮�W僎�条�撖澆枂嚗𥕢��蹱��牐���V����U���蝘啣��㗇𥋘��validate_fbx_yup_scene` �⊿� +Y �箸艶憯唳�銝舘��寞�頧穿�蝻拇𦆮嚗峕�蝏嘥��� -90簞 �贝蓮��辣��
|
||||
- `Tools/model_tools/bl_prepare_studio_trial.py` 撠� `fbxAxes.exportVersion` �坔��墧�嚗𢱌Tools/lmgirl_tpose_mesh.py` �厩��砍ế摰𡁏糓�血��� FBX 蝻枏�嚗峕�蝏� mesh_receipt �峕𧒄��鉄頧游�撉峕𤣰��迨甈⊥𧊋摰鮋��滩�閬����蟮�桀���
|
||||
- `Tools/model_tools/tests/bl_test_fbx_axes.py` �� `axis_pipeline_audit/regression/{results.json,run.log}`嚗�7 銝� Blender �𧼮�憿寥�朞�嚗�舅銝芾��脯���憭滩蓮�V舅甈~����脰��乓��仃韐交������霂舀�隞嗆�蝏嘅�嚗�4 銝芰緵�㗇聢撘誩�瘚见� 5 銝芾��祈祗瘜閙��仿�朞���仃韐交���★��紡�粹�霂臭蛹銝餃𢆡���𨬭���摰� static�𣜿Pbr ����墧� `axis_pipeline_audit/production/static_export.json` 撌脤�朞�嚗𥟇𧊋餈𥡝� Mixamo 蝵𤑳�銝𠹺���
|
||||
- `Tools/model_tools/README.md` 銝� `GameResProductProc.md` 撌脰‘摰峕㟲�箸艶頧游�撉峕𤣰閬��嚗屸俈甇V�璉��仿▲�� Y-up �舘秤�斗��麄��
|
||||
@@ -33,6 +33,10 @@
|
||||
| `…/LmGirl.fbx` | 减面低模 **3000** tris;Y-up、底面原点、-Z 正面 |
|
||||
| `…/LmGirl_base.png` / `LmGirl_mix.png` | XPbr 1024 |
|
||||
| `…/LmGirl.prefab` | 身高 1.65m,挂 Test/XPbr |
|
||||
| `Doc/Design/Character/LmGirl/lm_girl_tpose.jpg` | 2026-10-23 这次五步流程使用的 T 字正面图 |
|
||||
| `Tools/output/lmgirl_tpose_3d/lmgirl.glb` | 混元网页 50k 高模,实测 50000 面,任务 `45b488d6ba1f4051bf040c84b89fe6ef`,不进 Bundle |
|
||||
| `Tools/output/lmgirl_tpose_studio/` | Studio 低模 9068 面 → Studio UV → Blender 烘焙 → 保留 UV 减到 4999 面;1024²。未绑骨 |
|
||||
| `…/static/LmGirlTpose.fbx` | 上述低模的游戏网格:Y-up、底面中点原点、局部 -Z 正面。未进 Unity,也没有骨架 |
|
||||
| `Tools/output/lmcat_3d/lmcat.glb` | LmCat 混元高模(49847 面,不进 Bundle) |
|
||||
| `Tools/output/lmcat_game/` | LmCat 减面/烘焙/XPbr 中间输出(不进 Bundle) |
|
||||
| `AIClient/Assets/Bundles/Characters/Animal/LmCat/` | 动物 LmCat;Pipeline `SetupCharacter.SetupLmCat`;身高 0.42m |
|
||||
@@ -284,7 +288,7 @@
|
||||
|
||||
## 伙伴 T2 进化外观:T1 + 头部挂件(2026-10-21)
|
||||
|
||||
用户选定做法:T2 沿用已验收的 T1 模型、骨架与三动作,加一个绑在自身骨骼上的进化挂件。挂件设计用户确认(岩团团 2、火喵 3、芽芽 1、闪闪雀 1、泡泡龟 4、岩甲犀 3、烈焰狮 3、藤蔓灵 4、雷鸣豹 4、潮汐鲸 1),并授权提交腾讯混元 3D。**潮汐鲸挂件两次提交均在官网"立即生成"后未发起请求(当日额度用尽),尚未制作,其 T2 暂时沿用原占位标记。**
|
||||
用户选定做法:T2 沿用已验收的 T1 模型、骨架与三动作,加一个绑在自身骨骼上的进化挂件。挂件设计用户确认(岩团团 2、火喵 3、芽芽 1、闪闪雀 1、泡泡龟 4、岩甲犀 3、烈焰狮 3、藤蔓灵 4、雷鸣豹 4、潮汐鲸 1),并授权提交腾讯混元 3D。**潮汐鲸当批两次提交未成功属历史;2026-10-22用户直接授权后已完成混元高模、3D Studio初步低模/UV、512²烘焙和保留UV收尾400面,骨骼挂件与正式Hero9接入通过,现为10/10。** 状态见 `Doc/Design/Character/TideWhale/T2/Production.md`。
|
||||
|
||||
| 资源路径 | 用途与生成方式 |
|
||||
| --- | --- |
|
||||
@@ -341,3 +345,150 @@
|
||||
## 权威技能协议与正式战场接入(2026-10-21)
|
||||
|
||||
正式PrototypeArena新增19个可调SkillMuzzle空挂点(10伙伴+9敌人槽),Pipeline持久化、局部-Z前向,T2体型缩放同步作用于挂点;角色网格/骨架/原三动作不变。后续BuildPrototype重建和ApplyFormalEnemies替换保留挂点。实播回执 `Doc/Design/Combat/Runtime/unity_anchors.json`。
|
||||
|
||||
|
||||
## 潮汐鲸T2贝壳冠补齐(2026-10-22)
|
||||
|
||||
- `AIClient/Assets/Bundles/Characters/Animal/TideWhale/TideWhaleT2/`:400面FBX、512² XPbr base/mix、Test/XPbr材质和0.15m静态Prefab;混元50k高模→3D Studio初步低模2922面→Studio UV→对齐烘焙→保留UV减面400面,Y-up/底面中点原点/局部-Z正面。全部导入、材质与Prefab通过Pipeline创建。
|
||||
- 同角色根目录 `TideWhale_T2.prefab`:正式Studio T1 Variant,贝壳冠固定在头部bone_4,复用原22骨Avatar/控制器/三动作。正式Arena仅补Hero9/VisualT2,tier切换隐藏旧占位冠;400面/363帧随动/第20关权威轨迹暂停双速通过。57项保护文件哈希不变。
|
||||
- 高模与Studio回执在 `Tools/output/t2_3d/TideWhale/`、`Tools/output/t2_studio/TideWhale/`;可追溯摘要与Unity回执在 `Doc/Design/Character/TideWhale/T2/`。T2现为10/10,详见同目录Production.md。未构建或发布。
|
||||
|
||||
|
||||
## 营地向导 CampGuide(2026-10-23)
|
||||
|
||||
主界面行走角色。身份是营地图里的短发男孩探险家:额上飞行护目镜、奶油色衬衫、棕色背心和短裤、棕色短靴。网格从已有混元 50k 高模走 Studio 低模、Studio UV、Blender 烘焙,再按超出目标 30% 做保留 UV 减面。
|
||||
|
||||
| 路径 | 说明 |
|
||||
| --- | --- |
|
||||
| `Tools/output/campguide_3d/campguide.glb` | 原混元官网 50k 高模,50172 三角面,本次未重新生成。 |
|
||||
| `Tools/output/campguide_studio/` | Studio 低模 9638 面,超过 3000×1.3,Blender 保留 UV 减到 3000 面;1024² 五通道烘焙后打成 XPbr。 |
|
||||
| `AIClient/Assets/Bundles/Characters/Human/CampGuideStudio/` | 主界面当前角色。TokenRig Mixamo 命名骨架 33 根(躯干四肢,另有双手拇指、食指、中指;没有无名指、小指和脚趾)。`CampGuideStudio_Rigged.prefab` 高 1.55m,Y-up,脚底约在 0,局部 -Z 为正面,Test/XPbr。加载地址 `CampGuideStudio_Rigged`。 |
|
||||
| `AIClient/Assets/Bundles/Characters/Human/CampGuide/` | 早一版 Blender 直接减面加 22 骨 TokenRig original,主界面已不再加载。 |
|
||||
|
||||
## 可复用 Mixamo 骨架(2026-10-23)
|
||||
|
||||
给人形模型用的固定休息姿势,不随角色重新生成。来源是 `Res/Human/Anim/Male/Running.fbx` 的骨架本身:清掉跑步动画后,把身高转到 Y、脚底放到 0、脚趾朝向局部 -Z。65 根,含 Spine、Spine1、Spine2、脚趾,以及双手拇指到小指各 4 节。
|
||||
|
||||
| 路径 | 说明 |
|
||||
| --- | --- |
|
||||
| `Tools/rigs/mixamo/Mixamo.fbx` | 只有骨架,无网格、无动画。身高 1.75m,Y-up,局部 -Z 正面,左侧为 -X。 |
|
||||
| `Tools/rigs/mixamo/Mixamo.json` | 65 个 `mixamorig:` 关节名和轴向说明。 |
|
||||
| `Tools/model_tools/bl_fit_mixamo.py` | `template` 从 Mixamo 动画 FBX 重新导出上面的骨架。`fit` 把骨架贴到另一套人形网格,`palm` 去掉手指(连指手套),`full` 保留手指。`remap` 在 TokenRig 只蒙皮之后,按关节位置把 `bone_*` 改回 Mixamo 名字,并恢复父子和骨轴。 |
|
||||
|
||||
贴好的骨架交给 TokenRig 时只蒙皮:`demo.py --use_skeleton --skeleton_template original`。不要用 `--skeleton_template mixamo`,那个参数会按生成结果重命名。TokenRig 会把关节改成 `bone_*`,手臂链还可能反接,所以导出后要跑 `remap`。
|
||||
|
||||
营地向导用 `palm` 贴了一次并完成蒙皮(25 根,含 Spine2 和脚趾)。同一段 Kimodo 行走重定向后手臂仍是 T 字张开,迈步时双脚离地,没有替换主界面正在用的 33 骨角色。试做结果留在 `Tools/output/campguide_studio/rig_fixed/`。
|
||||
|
||||
## 可复用 SOMA 骨架(2026-10-23)
|
||||
|
||||
Kimodo 动作的休息姿势。从 Kimodo 行走 BVH 的 OFFSET 取出,单位换成米,保留原来的骨轴。78 根,含下颌、双眼和完整手指。Blender 里身高在 Z、脚趾朝 -Y、角色左侧在 +X;套进游戏时再转到 Y-up、局部 -Z 正面。
|
||||
|
||||
| 路径 | 说明 |
|
||||
| --- | --- |
|
||||
| `Tools/rigs/soma/Soma.fbx` | 只有骨架。身高 1.76m。 |
|
||||
| `Tools/rigs/soma/Soma.json` | 78 个关节名。 |
|
||||
| `Tools/model_tools/bl_fit_soma.py` | `template` 从 Kimodo BVH 导出上面的骨架。`fit` 贴到人形网格,`palm` 去掉手指、下颌和眼睛。骨轴保持不变,所以 Kimodo 的局部旋转可以同名直接套上。 |
|
||||
|
||||
营地向导按 `palm` 贴成 27 根,TokenRig `--use_skeleton` 蒙皮。结果在 `Tools/output/campguide_studio/rig_soma/`。
|
||||
|
||||
### SOMA 离线诊断与手部清理对照(2026-10-23)
|
||||
|
||||
- `Tools/output/campguide_studio/rig_soma/audit/hand_cleanup/skinned.glb`:从原 `skinned.glb` 经 Blender 导出;仅限制本角色 T-pose 手部区域使用同侧 Arm/ForeArm/Hand 权重并归一化,109 个顶点移除了总量超过 0.001 的非局部影响。27 骨、3000 三角面不变。是定位问题的试验件,关节位置、颈部和脚部仍待处理,未导入 Unity。
|
||||
- 工具 `Tools/model_tools/bl_audit_soma.py`:只读骨架、网格、权重与动画审计;GLB 按 30fps 逐原始帧采样,输出 `audit/baseline.json`、`audit/detail.json`、`audit/hand_cleanup/metrics.json`、`audit/control/metrics.json`;汇总见 `audit/summary.json`。`bl_soma_hand_cleanup_trial.py` 生成上述手部清理件,区域阈值只针对本角色。
|
||||
- 实测源骨架与成品共有骨的世界轴夹角小于 0.03°,但左/右肩尾到上臂头分别相差 0.244/0.229m;模型总高 1.135m。手腕也被拟合到手部质心附近。保持骨轴没有保证解剖关节贴合。脚骨脚趾指向 Blender -Y,而网格鞋尖、面部朝 +Y,需先统一模型与骨架正面,再做游戏轴向转换。
|
||||
|
||||
### Mixamo 网站绑定与 SOMA 对比审计(2026-10-23)
|
||||
|
||||
- 用户提供的 `AIClient/Assets/Bundles/Characters/Human/test/Boy_mixamo/CampGuideStudio.fbx`:3000 三角面、3698 顶点、41 骨、34 个权重组。包括脚趾及双手拇指/食指链,不是完整五指骨架。本轮只读,没有重新导出或修改源资源。
|
||||
- 与 SOMA 成品统一竖直轴并旋转 180° 后,所有顶点到 Mixamo 网格最近顶点的最大距离约 `4.31e-7m`,确认是同一份网格几何。Mixamo 头部关节高 0.819m、颈部 0.781m、左腕 X=0.327m;SOMA 分别为 1.046m、Neck1=0.926m、左腕 X=0.384m,后者存在明显拟合偏差。
|
||||
- 同一空间区域,Mixamo 手部没有脚/腿或头/颈影响;SOMA 最大脚部影响 31.29%。排除原动作差异后,两者都进行双上臂下垂 70°、头部绕竖直轴旋转 30° 的层级 LBS 测试:全身最坏边拉伸 Mixamo 1.552 倍、SOMA 4.955 倍;颈部 1.332/2.839 倍。零角度对照误差小于 0.002%。这测试的是现有绑定位置与权重的组合质量,不是所有蒙皮算法的通用排名。
|
||||
- Mixamo 单顶点最多 6 个非微小骨骼影响,裁到最大的 4 项时最大丢失总权重约 1.46%,需在目标导入设置下复核。
|
||||
- 审计工具 `Tools/model_tools/bl_inspect_mixamo_trial.py`、`bl_probe_mixamo_bind.py`、`bl_compare_mixamo_soma.py`;输出 `Tools/output/campguide_studio/mixamo_audit/{inventory,comparison,summary}.json`。无 Unity 导入、Avatar 验证或首页替换。
|
||||
|
||||
### 固定网站 41 骨的 TokenRig 只蒙皮对照(2026-10-23)
|
||||
|
||||
用户指定 `Tools/output/campguide_studio/static/CampGuideStudio.fbx` 为网格,使用 `test/Boy_mixamo/CampGuideStudio.fbx` 的原始 41 骨位置/层级/休息矩阵;网站权重全部删除。静态网格与网站网格刚性对齐最大顶点误差约 `9.22e-8m`。用户另行明确授权将本次输入与执行脚本上传现有 DGXA。
|
||||
|
||||
产物根目录:`Tools/output/campguide_studio/rig_mixamo41/`。
|
||||
|
||||
| 文件 | 用途与生成方式 |
|
||||
| --- | --- |
|
||||
| `source.glb`、`input_manifest.json` | 完整 41 骨推理输入;每骨在任意顶点保留非解剖占位权重,其余顶点归 Hips,防止 TokenRig 预处理裁掉未加权关节;这些占位不作为生成器的蒙皮条件,不含网站权重。 |
|
||||
| `rigged_raw.glb`、`tokenrig.log`、`run_tokenrig.sh` | DGXA 原始产物及复现入口:`--use_skeleton --use_transfer --skeleton_template original --rig_cls vroid`。41 骨、3698 顶点、3000 面。远端任务 `campguide_mixamo41_20261023_a2`;本地与远端输入/输出 SHA256 核对一致。 |
|
||||
| `joint_mapping.json`、`decoded_weights.json` | 按 GLB 真实蒙皮世界坐标读取结果;全局一对一匹配恢复骨名。关节量化偏移最大约 6.52mm,权重回装网格的顶点误差小于 `6.1e-7m`。 |
|
||||
| `tokenrig_mixamo41.blend`、`tokenrig_mixamo41.glb` | 只将 TokenRig 预测权重装回原网站骨架;恢复原始骨位置、骨轴和层级,保持受控对比。未做权重清理。Blender 源件 Z-up、正面 -Y;GLB 是离线评审中间件。 |
|
||||
| `tokenrig_mixamo41_local.blend`、`tokenrig_mixamo41_local.glb`、`local_cleanup.json` | 仅清除 T-pose 手部区域的跨部位影响,保留同侧 Arm/ForeArm/Hand/手指,重新归一化;21 个顶点被移除的影响总量超过 0.001。没有转移网站权重,没有改骨架或几何。区域阈值仅针对本角色。 |
|
||||
| `attempt_root_placeholder/{source,rigged_raw}.glb` | 首次输入仅 Hips 有权重,TokenRig `trim_skeleton` 自动把 41 骨裁到 1 骨;这是失败诊断件,未用于质量比较。配套原始输入清单、脚本和日志同目录保存。 |
|
||||
| `comparison.json`、`comparison_local.json`、`summary.json` | 网站权重/原始 TokenRig/手部约束版的同动作逐帧对比与汇总。 |
|
||||
|
||||
原始 TokenRig 仍给右手部分顶点分配最高 23.16% 的 `RightToe_End` 权重。相同 Walking 全身最大边拉伸:网站 2.029、TokenRig 原始 6.218、约束后 1.800;颈部网站 1.427、两种 TokenRig 均 1.580。固定角度垂臂/转头 LBS 对照全身最大值分别为 1.552/3.211/1.627。约束后的三动作均无超过 2 倍的有效边拉伸,但不能据此断言体积、穿插、所有动作或其他角色都等同网站质量。
|
||||
|
||||
工具:`Tools/model_tools/bl_tokenrig_mixamo41_trial.py`、`bl_clean_tokenrig_mixamo41.py`、`bl_audit_tokenrig_mixamo41.py`、`Tools/decode_tokenrig_mixamo41.py`。原 FBX、Unity 资产与首页均未修改;本轮不作 Unity Avatar 或最终游戏轴向验收。
|
||||
|
||||
## HomeCamp 主界面近景高模(2026-10-23,制作中)
|
||||
|
||||
用户明确授权上传腾讯混元,内置 imagegen 分件图经混元网页 50k 档生成;原图、任务号、来源哈希、包围盒和实际面数见 `Doc/Design/Scene/HomeCamp/homecamp_scene_manifest.json`。四个GLB内嵌贴图解码校验通过。高模是制作中间件,不直接进入游戏包。
|
||||
|
||||
| 路径 | 实际三角面与用途 |
|
||||
| --- | --- |
|
||||
| `Tools/output/homecamp_3d/ground/ground.glb` | 50000;广场地表,水平薄地块。 |
|
||||
| `Tools/output/homecamp_3d/mainhouse/mainhouse.glb` | 49760;奶油墙橙瓦主屋。 |
|
||||
| `Tools/output/homecamp_3d/cottage/cottage.glb` | 49990;带黄白遮阳棚侧屋。 |
|
||||
| `Tools/output/homecamp_3d/fountain/fountain.glb` | 49848;圆石池与双层小碗喷泉。 |
|
||||
|
||||
后续严格执行 Studio低模→Studio UV→Blender烘焙→超过目标30%时保留UV减面;此条仅登记高模,不表示最终场景已完成。制作入口 `Tools/homecamp_model_pipeline.py`。
|
||||
|
||||
## HomeCamp 独立场景首版(2026-10-23)
|
||||
|
||||
制作与逐步回执见 `Doc/Design/Scene/HomeCamp/Production.md` / `homecamp_scene_manifest.json`。四分件均已执行用户指定的混元网页高模→Studio低模→Studio UV→Blender烘焙→超目标30%时保留UV减面;减面焊接保留逐面UV并做面朝向/投射收尾。原XPbr未改,新场景使用独立双面 `Assets/Bundles/Shaders/XShader/HomeCampXPbr.shader`。
|
||||
|
||||
| 路径 | 用途、来源与状态 |
|
||||
| --- | --- |
|
||||
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/mainhouse/` | 1981面FBX、1024² XPbr base/mix、材质和Prefab;五步产物,竖屏场景内以三实例组成主屋与两侧房屋。 |
|
||||
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/fountain/` | 1795面FBX、1024² XPbr与Prefab;五步产物,中央石池与两层小碗喷泉。 |
|
||||
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/cottage/` | 2995面五步产物;仍有表面瑕疵,仅保留审核,未用于交付场景。 |
|
||||
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/ground/` | 8303面Studio地表;预算调整后在130%容差内跳过末级减面,表面仍未通过目视,只保留审核,未用于交付场景。 |
|
||||
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/GroundSurface.asset` / `GroundSurface.prefab` | 五步后的编辑收尾:Pipeline制作并持久化2三角面连续地表,36×42m、非凸MeshCollider;正俯视地表贴图另绘,非原Studio UV。25/25地表射线通过。 |
|
||||
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/{backdrop,tree_card,flower_card}.{png,mat}` | 湖泊/瀑布/城堡远景与透明树木/花边图片面片,Pipeline导入和保存;Unlit、无碰撞、不投影。 |
|
||||
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.prefab` / `HomeCamp.unity` | Pipeline持久化独立场景与总Prefab,31处布局;实际拼装9987三角面。复用旧TownSquare路灯/长椅;旧树/灌木因黑斑未使用。未加入Build Settings,尚未接入首页或真机性能验收。 |
|
||||
|
||||
工具:`Tools/homecamp_model_pipeline.py`、`Tools/model_tools/bl_decimate_homecamp_uv.py`、`bl_repair_homecamp_surface.py`、`AIClient/AgentScripts/BuildHomeCamp.cs`。中间件 `Tools/output/homecamp_studio/{ground,mainhouse,cottage,fountain}/`;验证 `Tools/output/homecamp_review/verification.txt`。与源模型同名的`.meta`/材质由Unity生成,无手写Unity序列化资源。
|
||||
|
||||
## Unity 角色动画对比观看场景(2026-10-23)
|
||||
|
||||
- 独立场景:`AIClient/Assets/Review/CharacterAnimationLab/CharacterAnimationLab.unity`;整套展示 Prefab:同目录 `Generated/CharacterAnimationLab.prefab`。通过 Unity Pipeline 制作并保存;菜单 `Tools/Characters/Open Animation Comparison` 打开后 Play。未接入首页或修改 Build Settings。
|
||||
- `Generated/{Mixamo,TokenRigRaw,TokenRigLocal}.asset`:同一 CampGuideStudio 网格的三版蒙皮,分别为网站权重、TokenRig 固定 41 骨原始权重、手部跨部位影响清理后权重。均为 41 骨、3000 三角面;为保存角点法线和 UV 分裂渲染顶点,没有改变三角面拓扑。展示身高约 1.55m,Unity Y-up、局部 -Z 朝前。
|
||||
- `Generated/CharacterTextured.mat` 复用原 CampGuideStudio XPbr 贴图;`Clay.mat`、`Floor.mat`、`Pedestal{0,1,2}.mat` 为 Pipeline 创建的展示材质,无新增美术贴图。
|
||||
- 生成入口 `Tools/model_tools/bl_export_animation_lab.py` → `Tools/output/campguide_studio/rig_mixamo41/unity_review/review_data.json` → `AIClient/AgentScripts/BuildCharacterAnimationLab.cs`。按原绑定矩阵、全量权重和同一组骨骼姿态制作原生 Unity Mesh/Clip,避免导入器与重定向差异影响对比。
|
||||
- `AIClient/AgentScripts/VerifyCharacterAnimationLab.cs` 已验证三版全部原始帧,共 1176 次 BakeMesh,区域最大边拉伸与 Blender 差异小于 0.00002;详见 `unity_review/unity_verification.json`。播放控件和骨骼同步验证通过,详见 `unity_controls.json`。这些验证不等同于整体动作美术验收。
|
||||
|
||||
## LmGirl TokenRig 固定 Mixamo 41 骨与同动作评审(2026-10-23)
|
||||
|
||||
- 输入静态模 `Tools/output/lmgirl_tpose_studio/static/LmGirlTpose.fbx`:4205 顶点、4999 三角面。骨架来自用户 Mixamo 41 骨文件;按 LmGirl 解剖标记调整关节位置,原骨轴和层级保留,未使用网站权重。准备时仅填入非解剖占位权重避免 trim_skeleton 删除关节。原网格、原 FBX、UV 均未改动。
|
||||
- `Tools/output/lmgirl_tpose_studio/rig_mixamo41/lmgirl_{raw,post,clean,clean_eps,local}.{blend,glb}`:五版静态绑定评审件。DGXA 一次预测派生原始与官方体素后处理版,之后分别试第三方骨架图距离清理、0.01 截断及角色专用局部约束;不是多次随机推理结果混比。运行回执与源/产物 SHA256 见同目录 `summary.json`、`run.log`、`input_manifest.json`。
|
||||
- 本轮选择 `local`:原始预测为底,约束辫子/头、袖口/手部和左右小腿,保留裤裆混合,最后 0.01 截断归一化,最多 4 骨影响。41 骨仍保留,但手部整体跟随手腕,暂不保留独立手指弯曲。Walking 全身最大有效边拉伸原始 15.727→局部约束 1.903,手部 10.717→1.000;局部约束版测试的有效边没有超过 2 倍拉伸。阈值为原边长度大于身高 0.2%,不等于体积/穿插/美术质量验收。
|
||||
- 全局 `clean_weights` 默认 min_hops=5 误删辫子的 Head 影响,最坏拉伸升至 44.252;官方体素后处理虽压低手到腿的漏权重,却增加局部权重突变,本角色最终未采用这两项全局处理。`topology_audit.json` 未发现裤裆以下左右腿连通,已否定最初的裤腿焊接猜测;通过权重约束修复,未切割网格。
|
||||
- Unity 场景 `AIClient/Assets/Review/CharacterAnimationLab/LmGirl/LmGirlAnimationLab.unity`;总 Prefab 为同目录 `Generated/LmGirlAnimationLab.prefab`。默认并排原始/体素后处理/局部约束;`Generated/{raw,post,clean,clean_eps,local}.asset` 为五份原生 Mesh,`Generated/LmGirl_{raw,post,clean,clean_eps,local}.prefab` 为对应休息姿态骨架网格。均通过 Pipeline 持久化。场景 Y-up、局部 -Z 正面,展示身高约 1.55m;未接入首页和 Build Settings。
|
||||
- `Generated/LmGirlTextured.mat`、`LmGirlTpose_{base,mix}.png` 复用本角色原烘焙图与 UV,使用项目 XPbr。纹理来自 `Tools/output/lmgirl_tpose_studio/xpbr/` 的通道打包结果;生成过程未上传贴图,远端只处理网格和骨架,因此本轮没有单独验证远端材质继承功能。
|
||||
- 工具 `Tools/model_tools/bl_lmgirl_mixamo41.py`、`Tools/tokenrig_lmgirl_trial_remote.py`、`Tools/run_tokenrig_lmgirl_trial.sh`、`Tools/summarize_lmgirl_mixamo41.py`;通用解码器 `Tools/decode_tokenrig_mixamo41.py` 现支持顶点角点分裂和可选结果文件名,保留旧调用兼容。中间件、5 版 GLB 重导入回执、160 帧次 Unity BakeMesh 和控件测试均在 `rig_mixamo41/`。
|
||||
|
||||
### LmGirl Mixamo 网站蒙皮加入观看场景(2026-10-23)
|
||||
|
||||
- 用户新增源 `AIClient/Assets/Bundles/Characters/Human/test/girl/LmGirlTpose.fbx`。实际为 33 骨,缺少原 41 骨模板的左右 8 根拇指骨;每顶点最多 5 个骨骼影响。网格仍为 4205 顶点、4999 三角面,与静态/TokenRig 输入最近顶点误差小于 0.00000006m。保留网站原权重、休息姿态、骨轴和层级,仅做浮点归一化,未截断到 Top-4。
|
||||
- 新原生 Mesh `AIClient/Assets/Review/CharacterAnimationLab/LmGirl/Generated/mixamo.asset` 与休息姿态 `LmGirl_mixamo.prefab`,通过 Pipeline 制作。沿用同一 XPbr 材质、贴图和约 1.55m 展示身高。新增 `LmGirlPedestal{0,1,2,3}.mat` 为四列台座纯色材质。
|
||||
- 原 `LmGirlAnimationLab.unity` 和总 Prefab 已扩为四版:Mixamo 网站/TokenRig 原始/体素后处理/局部约束。保留前三种 TokenRig 变体及所有既有实验 Mesh,未覆盖用户源 FBX。网站 33 骨与 TokenRig 41 骨的绑定位置不同,本次属于两套交付绑定比较,不能直接当作只变权重的严格控制实验。
|
||||
- 导出和核对入口 `Tools/model_tools/bl_lmgirl_mixamo_website.py`;数据/矩阵参考回执 `Tools/output/lmgirl_tpose_studio/rig_mixamo41/website/{inspection,unity_review_data,walking_comparison}.json`。全部 6 版共 192 次 Unity 原生蒙皮采样通过;网站版的最大指标差异约 0.000011,确认原 5 影响完整保留。
|
||||
|
||||
### LmGirl Walking 交叉腿适配修正(2026-10-23)
|
||||
|
||||
- 根因核对:男孩休息姿态脚踝间距约 0.2212m,女孩 TokenRig/网站约 0.1120/0.0999m;原角度复用含男孩宽站姿的向内补偿,套到女孩近乎平行的腿上导致骨骼脚踝越过中线,属于动作重定向缺陷。修正前最小有符号脚踝间距男孩 +0.1039m、女孩 TokenRig -0.0329m、网站 -0.0574m;纯骨骼测量独立于蒙皮。回执 `Tools/output/lmgirl_tpose_studio/rig_mixamo41/gait_diagnosis_before.json`。
|
||||
- 未改动四版网格、蒙皮权重、原绑定姿态及男孩源动作。Pipeline 更新原 LmGirl 场景和总 Prefab,四版引用各自目标骨架的修正步态剪辑,三份 TokenRig 网格仍共用同一个修正剪辑。当前站姿正确性由步态轨迹检查验证,不再仅凭边拉伸检查判断动作可用。
|
||||
|
||||
### LmGirl 静态 FBX 的 Mixamo 上传轴向修正(2026-10-24)
|
||||
|
||||
- `Tools/output/lmgirl_tpose_studio/mixamo_upload/LmGirlTpose_Mixamo.fbx`:从原 static/LmGirlTpose.fbx 生成的独立无骨架上传副本,4205 顶点/4999 三角面,UV 完全不变;Y-up、脚底中心原点、沿用原网格 -Z 正面。FBX 节点旋转为 0、缩放为 1,单位通过 FBX 全局 UnitScaleFactor=100 表达。已检查原始 FBX 元数据和 Blender 默认重新导入后的竖直站立,往返位置误差小于 0.00000009m;尚未上传 Mixamo 网站验证。
|
||||
- 原 `Tools/output/lmgirl_tpose_studio/static/LmGirlTpose.fbx` 为历史兼容输入,保持不变。此前 Y-up 描述只覆盖网格顶点:实际文件节点另含 X=-90°、缩放 100,导入器应用完整变换后身体沿水平轴躺倒。生成流程先将 Blender 网格转为 Y-up,导出器又按 Blender Z-up 场景进行轴转换,存在重复轴转换;上传请改用上面的修正版,既有 TokenRig/动画对比场景不替换输入。
|
||||
### 五步 Studio 流程的 FBX 收尾回归资源(2026-10-24)
|
||||
|
||||
- `Tools/output/lmgirl_tpose_studio/axis_pipeline_audit/production/`:隔离复制最终 `model_ex.glb` 与五通道图,经真实 `bl_prepare_studio_trial.py` → `bl_convert.py` 收尾,得到 `static/LmGirlTpose.fbx`、`xpbr/LmGirlTpose.fbx`。两者 4205 顶点/4999 三角面,完整场景默认重新导入均站立;FBX 节点旋转 0/缩放 1,UV 不变。用于修复验收,未覆盖历史原件及 Unity 已绑定模型。
|
||||
- `Tools/output/lmgirl_tpose_studio/axis_pipeline_audit/regression/{boy_from_glb,girl_from_glb,girl_repeat_1,girl_repeat_2,girl_from_legacy}.fbx`:共用导出器的双角色、旧版输入和重复转换回归;男孩 3698 顶点、女孩 4205 顶点。原点均为脚底中心、UV 保留、位置往返误差小于 0.00000009m;同目录 results.json 记录验收。
|
||||
@@ -445,7 +445,7 @@
|
||||
| --- | --- |
|
||||
| Doc/UIPrefabCreater/UI_PrototypeFriends.json / AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeFriends.prefab | G4 憟賢�憿蛛�68 ���嚗�1080�1920����瑟䰻�整��𤚗霂瑯��猐摰孵�摰𡁻�韏删兮��ools/generate_prototype_ui.py friends ��� JSON嚗釶ipeline BuildFriends.Build 頧祆� Prefab���憿萄末�𧢲��桀��嗅��� UI_MainHUD����典歇�劐�摰急聢�厰僼���銵券𢒰�踹�蝷潛��暹��� |
|
||||
|
||||
| `Doc/Design/Character/{Partner}/T2/{partner}_t2.png` | �冽��匧��� 10 撘� T2 ��辣霈曇恣�橘��𣂷漱瘛瑕�嚗𥟇蔭瘙鞾硫敺��摨行�憭㵪��� |
|
||||
| `Doc/Design/Character/{Partner}/T2/{partner}_t2.png` | �冽��匧���10撘�2��辣霈曇恣�曉�撌脫�鈭斗毽���璅∴�瞏格�斢訾�2026-10-22�瑞凒�交����銵仿�擃䀹芋��tudio雿擧芋嚗𦶥V�𦠜迤撘𤩺�隞塚�10/10摰峕��� |
|
||||
| `Tools/output/t2_review/{Partner}/*.png`��Tools/output/t2_review/sheet.png` | T2 Variant �𥕦�璉��乩��餉��芸㦛�� |
|
||||
|
||||
## 憭扯�擐㚚�Studio霂閖���斐�曆�撖寧�嚗�2026-10-21嚗�
|
||||
@@ -500,3 +500,100 @@
|
||||
- `AIClient/Assets/Screenshots/first_five_formation{1..5}.png`��first_five_result{1..5}.png`嚗𡁜�撘�1080�1920�啗揭�瑕��蛛�蝏梶��芸㦛嚗䔶�銝匧蘨�坔郎T1隡嗘撈銝擧迤撣貉�皞琜�Unity Pipeline蝏葘VerifyFirstFive`�芸����Game View��
|
||||
- �𣬚𤌍敶𧄧first_five_guide_shortage.png`嚗葘first_five_guide_ready.png`嚗𡁶���20嚗�40�嗥�撘訫紡��揢嚗𢱌first_five_diagnostic.png`銝粹��嗉��祈�霂閧�獢����銝�1080�1920嚗峕𧊋����𡝗𤜯�V��|I蝢擧钟��
|
||||
- �券�𢛵���𣂼��唳旿�𣬚𤌍閫���亥�`Doc/Design/G3/FirstFiveAcceptance.md`嚗���批銁`Doc/Design/G3/FirstFive/`��
|
||||
|
||||
|
||||
## 瞏格�斢禁2憭𤥁�銝𤾸��㗛��嗅㦛嚗�2026-10-22嚗�
|
||||
|
||||
`Doc/Design/Character/TideWhale/T2/{Review,ReviewWalk,ReviewAttack,StaticReview}/{front,side,back,perspective}.png`嚗䥪ipeline�券�蝳與reviewScene皜脫�嚗���思蛹T2�𥕦����Walk嚗苐ttack��甅��400�a����憯喳��𥕦�嚗𢱌overview.png`銝箸𧋦�訐IL�垍�����潭�餉�嚗�1200�860嚗㚁�瘝⊥��孵���⏛�整��battle.png`銝�900�1200甇��PrototypeFlow瘨�晶蝚�20�袍2 f1頧刻蕨��蘨霂餃允�瑟⏛�橘�T1/T2嚗誩�雿滚�嚗𤩺𤫇�鳴�瘞渡蔗嚗𤩺��𨅯��罸�朞�嚗䔶��浹TTP韐血噡�硋凝靽∠��箸⏛�整��
|
||||
擃䀹芋��400�X���lender�𥕦��� `Tools/output/t2_studio/TideWhale/audit_{model,model_ex}_*.png`嚗𣬚鍂鈭擧瓲撖寥�匧㦛頨思遢��䲮�㻫��蔭撱枏��条����餈啣�銝粹��嗅㦛���銝滩��且undle��
|
||||
|
||||
## �芸𢆡 UI SpriteAtlas嚗�2026-10-22嚗�
|
||||
|
||||
- `AIClient/Assets/Bundles/UI/Atlas/UI_CommonAtlas.spriteatlas`嚗鋴ommon 38 撘䭾��曄��𡁶鍂�找辣�暸���
|
||||
- `AIClient/Assets/Bundles/UI/Atlas/UI_HomeAtlas.spriteatlas`嚗䥅ome 16 撘䭾��曄�擐㚚△�暸���
|
||||
- `AIClient/Assets/Bundles/UI/Atlas/UI_PrototypeAtlas.spriteatlas`嚗䥪rototype 13 撘䭾��曄��笔��屸𢒰�暸���
|
||||
- ����孵�嚗𡁶宏璊� ClientTrunk �桀�蝥扳䲮獢���� `UiSpriteAtlasGenerator` 蝏� Unity API �芸𢆡���撟嗅��讐輕�歹��笔㦛銝𤾸㦛���朞� YooAsset ���嚗𥟇�憭折△ 2048��adding 4����贝蓮嚗讐揮撖�����mipmap��indows DXT5嚗𢁾OS嚗苐ndroid ASTC 6�6嚗𡦀ebGL ASTC 8�8嚗𥕢��啣��㚚�蝏䀹��曄���䲮獢�� `Doc/UI_Atlas_Pipeline.md`��
|
||||
- `Tools/output/ui_atlas/dialog.png`嚗朞䌊�典㦛��𦻖�亙��� 540�960 撖寡�獢���嗅㦛嚗𢏺ipeline �券�蝳� Play Mode 隞𡒊�摰� WebGL YooAsset ���頧� UI_ConfirmDialog �𡒊氖撅𤩺葡�橒�Editor fallback �喲𡡒��𢒰�踴����桀��喲𡡒�暹��其��詨笆�枏��擧遬蝷箔�銋嘥悍�潸器�䕘�瘝⊥��啣�銝𡁜𦛚�曄���
|
||||
|
||||
## 銝餌��Y宏�函垢摰匧��箔�憸���鞱捶嚗�2026-10-22嚗�
|
||||
|
||||
- `AIClient/Assets/Bundles/UI/Prefab/UI_MainHUD.prefab`嚗𡁶眏�湔鰵�𡒊� JSON �朞� Pipeline �滚遣嚗偦▲�券�撘��䀹絲嚗誩凝靽∟��𠺪�摨閖��踹��见飵�綽��峕艶蝏抒賒雿輻鍂�唳� `Assets/Bundles/UI/Bg/home_camp.png` �典��曄內嚗峕��啁��鞱��臬㦛��
|
||||
- `AIClient/Assets/Bundles/UI/Material/HomeExplorerCutout.mat`嚗䥪ipeline ���撟嗅��堒��� RawImage嚗���函緵�� HomeExplorerCutout Shader嚗𥡝��脤�閫���脤�𤩺�嚗屸��齿楛�脩畆敶U��
|
||||
- `Tools/output/home_mobile/{plain,iphone_notch_capsule,android_capsule}.png`嚗𡁻�蝳� GameplayBootstrap ���蝘滚�撟𤏪�摰匧��粹�閫���峕艶���𤩺�憸���峕��桀𦶢銝剖歇�詨笆嚗桕SON嚗𤩺�韐剁�Shader 靘肽��𤩺迤撘� Art ��遣�嗅���
|
||||
|
||||
## �亙𧑐�穃紡霈曇恣�橘�2026-10-22嚗�
|
||||
|
||||
| 頝臬� | 霂湔� |
|
||||
| --- | --- |
|
||||
| `Doc/Design/Character/CampGuide/campguide.png` | 銝餌��Z𨯫�啣�撖澆�頨怨挽摰𠾼��pt-image-2.5��--quality high`��--aspect-ratio 2:3`���瘚� 1024�1536嚗���� `Doc/Design/UI/Home/home_camp_with_cast.png` ��琸摮抵澈隞賭��亙𧑐�駁���迤�� T 摮㛖�憪踴��擪�桅��券�銝𨳍����讠征��滲�賢�嚗��閫� RGB ��253���蝷箄�閫���桀� `design_prompt.txt`���餈� Bundles�� |
|
||||
|
||||
### 2026-10-22 蝥蹂��扳�韐券�閫��摰寥�霂�
|
||||
- `Tools/output/server_release/legacy_preview.png`嚗䥪ipeline �𠉛氖�箸艶�㰘蝸撌脫� JSON 銝餌��� Prefab嚗䔶蝙�函瑪銝𦠜唂�惩��脫�韐券�霂�耨�孵����閫��540�960嚗𣬚㮾�箸葡�𤘪⏛�整��𧊋����唬��∟斐�橘��芣㺿�� Art嚗𥟇��亦畆敶Z��舀��支�閫坿𠧧靽萘�������韐其�摮睃�澆��� `packed_preview.json`��
|
||||
|
||||
## HomeCamp 銝餌��Z𨯫�啣�隞嗡�餈𨀣艶�橘�2026-10-23嚗�
|
||||
|
||||
�厩鍂�瑞&霈斤�銝餌��Z��航��蠘��臬嘀�箝���撅衤��瑟�����函眏��蔭 imagegen ���� `AIClient/Assets/Bundles/UI/Bg/home_camp.png` ���嚗𥕦��湔�蝷箄� `Doc/Design/Scene/HomeCamp/design_prompts.json`嚗��雿𡏭恣�鍦��桀� `Production.md`嚗峕䔉皞𣂼�撣䎚��偕撖訾��賢�璉��亥� `homecamp_scene_manifest.json` / `design_verification.json`��
|
||||
|
||||
| 頝臬� | �券�𥪯����霂湔� |
|
||||
| --- | --- |
|
||||
| `Doc/Design/Scene/HomeCamp/mainhouse.png` | 憟嗆硃憓蹱��虫舅撅�蜓撅页��思�撅讠蕉��𨺗�梢秄�諹�蝒梹��賢��蓥辣�曄�3D颲枏�嚗𢏺NG 1254�1254�� |
|
||||
| `Doc/Design/Scene/HomeCamp/cottage.png` | 暺�蒾�桅翧璉𡁜�撅�儒撅页��笔椰�喳��剁��賢��蓥辣�曄�3D颲枏�嚗𢏺NG 1312�1199�� |
|
||||
| `Doc/Design/Scene/HomeCamp/fountain.png` | 瘚�𨺗�����舅撅��蝣𦯀��肽𠧧瘞湧𢒰嚗𤤿蒾摨訫�隞嗅㦛��3D颲枏�嚗𢏺NG 1402�1122�� |
|
||||
| `Doc/Design/Scene/HomeCamp/ground.png` | �滩��𡒊𨺗�祉�撟踹㦤�啗”嚗���喟𨺗頝航��伐��賢��蓥辣�曄�3D颲枏�嚗𢏺NG 1536�1024�� |
|
||||
| `Doc/Design/Scene/HomeCamp/backdrop.png` | �祉�皝𡝗����穃����撅曹��喃儒�𤾸嵗餈𨀣艶韐游㦛嚗峕��其�Unlit�曄��Y�嚗𥕦�撟�艶�莎�銝滨鍂鈭𤾸㦛�笔���芋�页�PNG 1536�1024�� |
|
||||
|
||||
敶枏�隞���𣂼㦛����嗡�皜��嚗���芰��� HomeCamp 擃䀝�璅~���韐具��refab �硋㦤�胯��毽���隡㰘◤�芸𢆡摰⊥鸌�行⏛嚗���𡒊&蝚砌��嫣�隡䭾����璅∪�撠�艇�潸粥�冽�������憿菟�璅﹦�Studio雿擧芋�㷧tudio UV�蔃lender�条��坿�餈�𤌍��30%�嗡��䉠V�誯𢒰��㦛����芸紡�冊nity��
|
||||
|
||||
### HomeCamp �𤩺�璊滩◤�Y�嚗�2026-10-23嚗�
|
||||
|
||||
- `Doc/Design/Scene/HomeCamp/tree_card.png`嚗�1200�1310 RGBA �𤩺��烐銁�橘�����緵�厰�憿菔��舐眏��蔭imagegen���嚗𤤿鍂鈭擧�撅见��孵�颲寧���𤐄摰𡁏㦤雿滚㦛��𢒰����蹂誨�厰��𤑳��扳��剁�銝齿糓�曄�璅∪�颲枏���
|
||||
- `Doc/Design/Scene/HomeCamp/flower_card.png`嚗�1536�1024 RGBA �𤩺��讛��曹��橘��峕䲮撘讐��琜��其��瑟��梯器��嘀�箄器蝻㗛𢒰����舅�靠lpha��鉄0�潘�Unity��鍂Unlit AlphaClip 0.55���蝣唳�����訫蔣���蝷箄� `Doc/Design/Scene/HomeCamp/foliage_prompts.json`��
|
||||
- `Tools/output/homecamp_review/{tree,lamp,bench,bush}_{front,side,back,perspective}.png`嚗䥪ipeline�𠉛氖�箸艶�𥕦�憸��嚗𥟇�/�峕銁摮睃銁�抒��䠷��𡢅�銝滚��剁�頝舐�/�踵��朞�憭滨鍂璉��乓��恣�訾舅憟埈�鋡怠�䠷�㗇𧒄�滚�颲枏枂��糓霂𦠜鱏�橘�隞亙�雿𨀣�獢�扇敶蓥蛹����
|
||||
|
||||
### HomeCamp 鈭支�韐游㦛銝𤾸㦤�舫��塚�2026-10-23嚗�
|
||||
|
||||
- `Doc/Design/Scene/HomeCamp/ground_surface.png` / `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/ground_surface.png`嚗�1254�1254 PNG嚗��蝵展magegen����緵�厰�憿菔��舐��嗥�甇�膳閫�𧑐銵券��脰斐�橘��典��唾楝銝舘��堆��删蒾颲對��其�Pipeline�嗡����蝏剖𧑐銵券▲�U���蝷箄��𣬚𤌍敶� `ground_surface_prompt.txt`��nity�桅�窃RGB蝥寧���ipMap����麄��lamp嚗𥟇�韐沃nlit��
|
||||
- `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/{backdrop,tree_card,flower_card}.png`嚗𡁜�餈啗��臬��𤩺��曄�Unity颲枏�嚗𤤿眏Pipeline撖澆���舅�𤩺��適lphaClip 0.55���蝣唳�/�訫蔣���甈∪�甇兄hader憸��鈭抒����摨蓥蛹霂𦠜鱏餈��嚗峕�蝏���瑚蝙�典��穃�甇亦�霂𡢅��𣳇�摨𨰻��
|
||||
- `Tools/output/homecamp_review/homecamp_portrait.png` / `homecamp_tall.png`嚗䥪ipeline�祉��箸艶�笔��豢㦤皜脫�嚗�1080�1920 / 1080�2400嚗𥕢�撅卝��𪃾瘜剹���蝏剖嘀�箔��匧𧑐����臬㦛��鵭撅讛器蝻䁅���銁甇��擐㚚△�亙��嗅��㗇㦤�贝��氬��
|
||||
- `Tools/output/homecamp_review/{ground,mainhouse,cottage,fountain}_{front,side,back,perspective}.png`嚗𡁜��啣�隞�640簡�𥕦�摰⊥瓲�橘�Studio�啗”/靘批�隞齿𧊋�朞��株�嚗䔶��其漱隞䀹𣄽鋆�葉��蜓撅衤��瑟�撌脖蝙�具��
|
||||
- `Tools/output/homecamp_studio/{mainhouse,fountain}/audit_{model,model_ex}.png`嚗鋳lender擃䀹芋/�脲活雿擧芋撖寧�霂𦠜鱏�橘�隞�蛹�嗡�餈��嚗峕�蝏�誑Unity鈭支��芸㦛銝箏���
|
||||
|
||||
銝𡃏膩�曆�鈭娍郊璅∪����憪贝��乓���撣����蝏�蝙�函𠶖����餉扇�蚜omeCamp�嗡�皜��嚗𥕦��滨𡠺蝡见㦤�臬��芣𤜯�W�擐㚚△�峕艶��
|
||||
|
||||
### SOMA �嗵铜皜��撖寧��橘�2026-10-23嚗�
|
||||
|
||||
`Tools/output/campguide_studio/rig_soma/audit/{baseline,hand_cleanup}_{side,back}.png`嚗�4 撘� 512�640 Blender Cycles �唳芋霂𦠜鱏�橘��� `Tools/model_tools/bl_render_soma_comparison.py` 隞亦㮾�𣬚㮾�箝����匧� Walk 1 蝘鍦�憪踵����僐��鍂鈭擧�颲��憪𧢲��滚�隞������券�撅��典蔣�滨���𧋦嚗𥕦𢰧�见��箇�閫��憸��畾讠�隞齿��整����� Unity �鞱捶嚗𤩺迤撘誩㦤�舫��嗅㦛��
|
||||
### Mixamo 蝵𤑳�蝏穃�銝𤾸𢆡�餃笆瘥𥪜㦛嚗�2026-10-23嚗�
|
||||
|
||||
`Tools/output/campguide_studio/mixamo_audit/Mixamo_{Walking,Breathing_Idle,Happy_Idle}_{front,side,back}.png`嚗�9 撘� 512�640 Blender Cycles �唳芋霂𦠜鱏�橘�雿輻鍂�冽��𣂷����蝏穃�璅∪�銝𦒘�銝芣�蝵烐聢�函𤫇嚗䔶誑���撉券盲銝𣇉�憪踵����笔��其�蝥虫����銝�憭��憪踹飵����𣂼膥 `Tools/model_tools/bl_compare_mixamo_soma.py`��鍂鈭擧��亥�憸�����其��𡁏�敶W�嚗𥕦�憪贝斐�整��nity Avatar��迤撘誩㦤�舀𧊋蝥喳��祈蔭�曉�撉峕𤣰����𣇉��𡏭��𣬚𤌍敶� `summary.json`��comparison.json`��
|
||||
### TokenRig �箏� Mixamo 41 撉刻��桀笆�批㦛嚗�2026-10-23嚗�
|
||||
|
||||
`Tools/output/campguide_studio/rig_mixamo41/review/{Mixamo,TokenRig41,TokenRigLocal}_{Walking,Breathing_Idle,Happy_Idle}_{front,side,back}.png`嚗�27 撘� 512�640 Blender Cycles �唳芋霂𦠜鱏�整���蝘齿��滚��思蛹蝵𤑳��笔���𤐄摰� 41 撉函� TokenRig �笔�憸�����蝘駁膄�钅�頝券�雿滚蔣�滨� TokenRig ��𧋦嚗𥕦�銝�蝵烐聢���銝�憟烾爸�嗅��䔶�皞𣂼𢆡雿頣��齿���𢆡雿𦦵漲銝匧�銋衤�憭�����𣂼膥 `Tools/model_tools/bl_audit_tokenrig_mixamo41.py`嚗���� `bl_compare_mixamo_soma.py`��� Unity �鞱捶�� Avatar 撉峕𤣰��
|
||||
|
||||
| Doc/Design/Character/LmGirl/lm_girl_tpose.jpg | 2026-10-23 �冽������ LmGirl T 摮埈迤�W㦛嚗𣬚滲�賢�嚗𥟇𧋦甈� 50k 擃䀹芋銝� 4999 �V�璅∠�颲枏� |
|
||||
|
||||
## Unity 閫坿𠧧�函𤫇撖寞�閫���箸艶�芸㦛嚗�2026-10-23嚗�
|
||||
|
||||
- `AIClient/Assets/Screenshots/character_animation_lab/overview.png`嚗帋����甇亥�韏啣��荔�蝵𤑳���okenRig �笔�����函漲�笔�嚗䔶�撌血��單��𨰜��
|
||||
- �𣬚𤌍敶� `raw_hand.png` / `clean_hand.png`嚗阳alking 蝚� 11 撣改�0.333 蝘𡜐��單��唳芋��尿��鸌�辷�撅閧內�笔�頝券�雿齿��齿��臬��钅�蝥行��𡒊��箏���
|
||||
- 銝匧㦛��蛹 1080�1920嚗𪄇nity Pipeline �� Play Mode �� `capture_game_view --source screen` �芸�嚗���怠��� Overlay UI嚗𥕢�撅硺��啣�蝢擧钟韐游㦛����W��� `Assets/Bundles/UI/Texture/Common/`嚗諹��脣��函緵�� CampGuideStudio XPbr 韐游㦛��
|
||||
|
||||
## LmGirl ��𢆡雿𡏭��株�摰∟斐�曆��芸㦛嚗�2026-10-23嚗�
|
||||
|
||||
- `Tools/output/lmgirl_tpose_studio/xpbr/LmGirlTpose_{base,mix}.png`嚗𡁜��蹱��芋鈭𥪜��条�韐游㦛蝏� `Tools/model_tools/bl_convert.py` 頧砌蛹 1024簡 XPbr �枏��橘��芰��鞉鰵蝢擧钟嚗𢏺ipeline 撖澆��� `AIClient/Assets/Review/CharacterAnimationLab/LmGirl/Generated/`嚗𠩯ase 銝� sRGB嚗龧ix 銝箇瑪�改�UV 摰��憭滨鍂��
|
||||
- `AIClient/Assets/Screenshots/lmgirl_animation_lab/overview.png`嚗阳alking 蝚� 25 撣找�����荔��𣬚𤌍敶� `voxel_hand.png`��local_hand.png`嚗𡁶洵 28 撣抒�璅∪𢰧�𧢲�颲����銝� 1080�1920��nity Play Mode Pipeline screen �芸㦛嚗���怎�摰� Overlay UI���蝏�⏛�曉歇�駁膄�拇�鋡急��烐��亙炏摰𡁶�鋆方�蝎䁅��鞟內��
|
||||
- `Tools/output/lmgirl_tpose_studio/rig_mixamo41/static_front.png`嚗鋳lender �唳芋甇�𢒰璉��亙㦛嚗�1100�1000嚗䔶�靘偦爸�嗆��������
|
||||
|
||||
### LmGirl 蝵𤑳�����堒笆瘥娍⏛�橘�2026-10-23嚗�
|
||||
|
||||
- `AIClient/Assets/Screenshots/lmgirl_animation_lab/mixamo_four_way.png`嚗𡁶洵 25 撣改�蝵𤑳����憪钅�瘚卝���蝝惩�憭������函漲�煺�撌西秐�單��梹�`mixamo_upper.png`嚗𡁶洵 14 撣抒�蝡嗵��唳芋銝𡃏澈�孵���1080�1920嚗𪄇nity Pipeline Play Mode screen �芸�嚗峕窒�函緵�㕑��脰斐�橘��䭾鰵憓䂿��舐犒����
|
||||
|
||||
### LmGirl 鈭文��蹂耨甇���擧⏛�橘�2026-10-23嚗�
|
||||
|
||||
- `AIClient/Assets/Screenshots/lmgirl_animation_lab/feet_before.png` / `feet_after.png`嚗𡁶洵 17 撣改�撅��函漲�毺��唳芋��㮾�峕㦤雿㵪����銝湔𧒄憸���扯�摨阡����峕鰵�𡁻�頧刻蕨���嚗𤤿鍂鈭𡒊&霈支漱�㗇䔉�芷爸撉潸��具��唂憸��隞�㺿 Play Mode 銝湔𧒄撘閧鍂嚗𣬚��笔��W��箸艶靽嘥���迤蝖桀�颲㻫��
|
||||
- �𣬚𤌍敶� `gait_corrected_four_way.png`嚗𡁶洵 25 撣批���耨甇����斐�曉��胯����曉�銝� 1080�1920嚗𪄇nity Pipeline Play Mode screen �芸㦛嚗峕��啣�蝢擧钟蝥寧���
|
||||
|
||||
### FBX 頧游��嗅偏�𧼮�韐游㦛嚗�2026-10-24嚗�
|
||||
|
||||
- `Tools/output/lmgirl_tpose_studio/axis_pipeline_audit/production/bake_maps/*.png`��production/static/LmGirlTpose_{color,normal,ao,metallic,roughness}.png`嚗𡁜��嗅�鈭娍郊�条��曄鍂鈭𡡞�蝳餅𤣰撠曉�敶𡜐�銝漤��啁��踺��
|
||||
- `Tools/output/lmgirl_tpose_studio/axis_pipeline_audit/production/xpbr/LmGirlTpose_{base,mix}.png`嚗𡁶�摰� bl_convert.py 隞𦒘�餈啣㦛����� 1024簡 XPbr 韐游㦛嚗𣬚鍂鈭𡡞�霂�耨甇� FBX �擧�韐刻蓮�V��舀迤撣詨��琜��芣𤜯�X迤撘讛斐�整��
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
音频资源(音效、BGM、语音等)。每条包含:路径、简要说明。
|
||||
|
||||
最新状态(2026-10-22):UI使用已接入的v3合成音效,早期v1/v2条目保留制作历史;技能计划9/9已生成并接入。混音试听见文末本日登记,主观听审尚待确认。
|
||||
|
||||
| 资源路径 | 简要说明 |
|
||||
| --- | --- |
|
||||
| `AIClient/Assets/Bundles/Sound/BGM/CandyCamp_MainMenu_Loop.ogg` | 2026-10-20:Candy 营地主界面 BGM《糖果营地》,按 `D:/UD/AI/XModel/DGX音乐_AI调用指南.md` 调用 DGXA ACE-Step 1.5 XL SFT,50 步、单首、空歌词生成。温暖轻快的原声木琴/马林巴、拨弦、木吉他与柔和木管方向;90.9 秒、48 kHz、立体声 Vorbis,约 1.55 MiB。由94秒原曲裁掉尾部衰减并做1.8秒首尾等功率交叠,峰值约 -3.17 dBFS;仅完成技术衔接平滑,音乐听感待人工试听。Unity Pipeline 导入为 CompressedInMemory、后台加载、不预加载;收集到 Art/Sound,地址 `CandyCamp_MainMenu_Loop`,PackSeparately。未接入运行时播放、未构建或发布。生成与验证详见 `Doc/Design/Sound/MainMenu/ProductionBrief.md`。 |
|
||||
@@ -13,7 +15,7 @@
|
||||
|
||||
## 技能音效制作计划(2026-10-20)
|
||||
|
||||
`Doc/Design/Sound/BattleSkills/manifest.json` 按用户指定TangoFlux方法规划FireCharge、FireLaunch、FireHit、RockHit、Heal、Shield、Slow、Lightning、EnemyHit共9项。当前仅完成请求配方与校验,尚未生成WAV、后期、试听或Unity接入;不计为已交付声音。后续生成验收完成后按实际文件补登记。调度与制作流程见 `Doc/Design/Combat/SkillSystem.md`。
|
||||
本节为2026-10-20计划快照。`Doc/Design/Sound/BattleSkills/manifest.json` 的FireCharge、FireLaunch、FireHit、RockHit、Heal、Shield、Slow、Lightning、EnemyHit现已全部生成并接入正式战场(9/9),实际产物及回执见下文Slice/Partners登记。2026-10-22补齐混音试听文件,主观听感仍待确认;不能再把计划快照当成未生成状态。
|
||||
|
||||
## UI 音效 v2 与运行时播放(2026-10-21)
|
||||
|
||||
@@ -39,13 +41,21 @@
|
||||
|
||||
## 五敌人战场替换与技能闭环样例(2026-10-21)
|
||||
|
||||
新增 `AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_{FireCharge,FireLaunch,FireHit,RockHit,Shield}.wav`,时长依次0.48/0.28/0.40/0.32/0.65秒;PCM16、44.1kHz立体声,TangoFlux 2秒/50步/guidance4.5/固定seed生成,65Hz高通、起音裁切、5ms淡入/50ms淡出,峰值约-1.94dBFS。原稿 `Tools/output/skill_slice_sfx/`;任务与实际请求哈希 `Doc/Design/Sound/BattleSkills/Slice/generation.json`,试听同目录 preview.wav。独立技能样例播放,8音源池、音效开关/暂停/切场清理通过;人工听感待试听。计划表现在5/9生成,4条仍计划。上游权重许可非商业研究,未声明商用许可。
|
||||
新增 `AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_{FireCharge,FireLaunch,FireHit,RockHit,Shield}.wav`,时长依次0.48/0.28/0.40/0.32/0.65秒;PCM16、44.1kHz立体声,TangoFlux 2秒/50步/guidance4.5/固定seed生成,65Hz高通、起音裁切、5ms淡入/50ms淡出,峰值约-1.94dBFS。原稿 `Tools/output/skill_slice_sfx/`;任务与实际请求哈希 `Doc/Design/Sound/BattleSkills/Slice/generation.json`,试听同目录 preview.wav。独立技能样例播放,8音源池、音效开关/暂停/切场清理通过;人工听感待确认。当批为5/9,后续已由Partners补至9/9。上游权重许可非商业研究,未声明商用许可。
|
||||
|
||||
|
||||
## 权威技能协议与正式战场接入(2026-10-21)
|
||||
|
||||
此前生成的 `Sound/SFX/BattleSkills/Sfx_{FireCharge,FireLaunch,FireHit,RockHit,Shield}.wav` 已从独立样例推广到正式BattleSkillPresentation的8音源池,按权威释放/命中/护盾事件播放;与敌人反馈池合计有界16音源,技能池总音量预算0.3。暂停/静音/低帧率过期声音跳过/结束和禁用清理通过。本批无新增音频,仍为5/9计划音效生成;源任务与TangoFlux许可记录沿用BattleSkills/Slice。
|
||||
此前生成的 `Sound/SFX/BattleSkills/Sfx_{FireCharge,FireLaunch,FireHit,RockHit,Shield}.wav` 已从独立样例推广到正式BattleSkillPresentation的8音源池,按权威释放/命中/护盾事件播放;与敌人反馈池合计有界16音源,技能池总音量预算0.3。暂停/静音/低帧率过期声音跳过/结束和禁用清理通过。本批无新增音频;当批为5/9,后续已补至9/9,源任务与TangoFlux许可记录沿用BattleSkills/Slice。
|
||||
|
||||
|
||||
## 伙伴治疗/减速/雷电/受击音效补齐(2026-10-21)
|
||||
新增 `AIClient/Assets/Bundles/Sound/SFX/BattleSkills/Sfx_{Heal,Slow,Lightning,EnemyHit}.wav`,分别用于治疗、减速、雷电命中、普通软受击,长度0.55/0.50/0.38/0.26秒。按 TangoFlux_AI调用指南由本地8012生成,2秒源音/50步/guidance4.5,实际seed52005/52007/52008/52009;裁切、高通、淡入淡出及峰值规范化,PCM16/44.1kHz/双声道。回执及九条连听:`Doc/Design/Sound/BattleSkills/Partners/{generation.json,preview_all_nine.wav}`;源音与请求:`Tools/output/partner_skill_sfx/`。manifest现为9/9生成,正式战场按cast去重并与静音/暂停同步;来源哈希与零削波校验通过。主观听审及上游发布授权状态沿用制作记录,见 `Doc/Design/Combat/PartnerSkills/Production.md`。
|
||||
|
||||
|
||||
## 技能/UI 混音试听(2026-10-22)
|
||||
|
||||
| 路径 | 用途与生成方式 |
|
||||
| --- | --- |
|
||||
| `Doc/Design/Sound/MixReview/{menu_ui,skill_bank,battle_1x,battle_2x,overlap_stress}.wav` | 5份离线试听,17/16/26/26/8秒,PCM16/48kHz/立体声。`Tools/build_audio_mix_review.py` 按正式音频、Pipeline音源参数及第20关T2轨迹重建;不改正式文件,不加归一化/限幅器。五份样例零越界,4倍过采样最高峰-3.47dBFS;主观听审未声称通过。 |
|
||||
| `Doc/Design/Sound/MixReview/*_float.wav`、同名JSON、`validation.json`、`unity_snapshot.json`、`unity_recovery.json` | 5份浮点母带保留原增益与越界检查依据;事件/源哈希/峰值/RMS/输出哈希、正式音量和编辑器恢复回执。Unity实录尝试超时,没有实录交付;试听属于离线重建。详见同目录 `Production.md`,不进入Bundle。 |
|
||||
|
||||
@@ -49,7 +49,9 @@
|
||||
|
||||
## 5. 支持组件
|
||||
|
||||
Canvas、CanvasScaler、GraphicRaycaster、CanvasGroup、Image、TextMeshProUGUI、Button、Shadow、Outline、ScrollRect、RectMask2D、Mask、TMP_InputField、VerticalLayoutGroup、ContentSizeFitter、LayoutElement、MonoBehaviour。
|
||||
Canvas、CanvasScaler、GraphicRaycaster、CanvasGroup、Image、RawImage、TextMeshProUGUI、Button、Shadow、Outline、ScrollRect、RectMask2D、Mask、TMP_InputField、VerticalLayoutGroup、ContentSizeFitter、LayoutElement、MonoBehaviour。
|
||||
|
||||
`assets.sprites` 的明确路径会被实际使用,声明资源缺失时生成失败。RawImage 可用 `material` 指定 Assets 下的材质完整路径,并配置 `color`、`raycastTarget`;业务预览着色器通过序列化材质引用进入资源包。
|
||||
|
||||
不要依赖未实现的 Toggle/Slider/Scrollbar/TMP_Dropdown/ScrollView 完成核心功能。
|
||||
|
||||
|
||||
@@ -42,6 +42,8 @@
|
||||
- 标准控件底图必须九宫格:`imageType: Sliced` + Sprite 有效非零 `Border` + `Full Rect`;按钮状态图同样设置。Common 导入规则:`UiSpriteNineSliceRules.cs`;修复菜单:`Tools/UI/Apply Standard Control Nine-Slice`。
|
||||
- 按钮:SpriteSwap 优先
|
||||
- `MonoBehaviour.typeName` 指向 HotUpdate 类型
|
||||
- 安全区等通用基础组件可指向 AOT 类型;主界面顶部布局使用 `AOT.UI.UiSafeArea`,业务按钮避开摄像头与微信胶囊,背景保持全屏。
|
||||
- 转换器遵循 `assets.sprites` 显式路径;`RawImage.material` 为序列化材质引用,禁止仅依赖 Shader.Find 保留业务预览 Shader。
|
||||
|
||||
## 资源加载
|
||||
|
||||
@@ -53,12 +55,12 @@
|
||||
- 当前仅使用 Candy 糖果风;Studio / Mint 主题与停用的切换入口已删除。
|
||||
- `BootSettings.UiTheme` / 远程 `version.json.uiTheme` 保留用于旧配置兼容,其他值回退 Candy。
|
||||
- 业务按逻辑名异步打开:`UiManager.OpenAsync`。
|
||||
- UI Prefab 收集进 Art/UI,图片与字体作为依赖进入资源包。
|
||||
- UI Prefab 与自动图集收集进 Art/UI,图片跟所属图集同包,字体作为 Prefab 依赖进入资源包。
|
||||
|
||||
## 与图集方案关系
|
||||
|
||||
- 现阶段允许 Common 下单图 Sprite 直接被 Prefab 引用。
|
||||
- 目录级自动 SpriteAtlas / 打包绑定见 `Doc/UI_Atlas_Pipeline.md`(后续里程碑)。
|
||||
- Prefab 继续直接引用单图 Sprite,JSON 路径与九宫格 Border 保持不变。
|
||||
- 目录级自动 SpriteAtlas、YooAsset 同包及运行时异步绑定见 `Doc/UI_Atlas_Pipeline.md`。
|
||||
|
||||
## Agent 边界
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"schemaVersion": 1,
|
||||
"prefabName": "UI_MainHUD",
|
||||
"prefabPath": "Assets/Bundles/UI/Prefab/UI_MainHUD.prefab",
|
||||
"description": "HUD 主界面 / candy。参考 Clash of Critters 营地式入口布局,采用项目主题;1080×1920,JSON→Prefab。中央为去掉人物的营地插画,简模探险家在广场走动,点击后才显示随机台词。功能入口通过 MainHUD.* 事件接入。保留网络状态和重连绑定,无主题切换按钮。",
|
||||
"description": "HUD 主界面 / candy。参考 Clash of Critters 营地式入口布局,采用项目主题;1080×1920,JSON→Prefab。中央为去掉人物的营地插画,营地向导在广场走动,点击后才显示随机台词。功能入口通过 MainHUD.* 事件接入。保留网络状态和重连绑定,无主题切换按钮。 ?????????????????????????????????? Prefab ?????",
|
||||
"canvas": {
|
||||
"canvasScaler": {
|
||||
"referenceResolution": [
|
||||
@@ -16,7 +16,7 @@
|
||||
"sprites": {
|
||||
"btn_primary_normal": "Assets/Bundles/UI/Texture/Common/btn_primary_normal.png",
|
||||
"btn_primary_pressed": "Assets/Bundles/UI/Texture/Common/btn_primary_pressed.png",
|
||||
"home_camp": "Assets/Bundles/UI/Texture/Home/home_camp.png",
|
||||
"home_camp": "Assets/Bundles/UI/Bg/home_camp.png",
|
||||
"home_ico_avatar": "Assets/Bundles/UI/Texture/Home/home_ico_avatar.png",
|
||||
"home_ico_bag": "Assets/Bundles/UI/Texture/Home/home_ico_bag.png",
|
||||
"home_ico_battle": "Assets/Bundles/UI/Texture/Home/home_ico_battle.png",
|
||||
@@ -115,12 +115,30 @@
|
||||
"parent": "UI_MainHUD",
|
||||
"active": true,
|
||||
"rect": {
|
||||
"anchorMin": [0.12, 0.34],
|
||||
"anchorMax": [0.88, 0.7],
|
||||
"offsetMin": [0, 0],
|
||||
"offsetMax": [0, 0]
|
||||
"anchorMin": [
|
||||
0.12,
|
||||
0.34
|
||||
],
|
||||
"anchorMax": [
|
||||
0.88,
|
||||
0.7
|
||||
],
|
||||
"offsetMin": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"offsetMax": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"components": [
|
||||
{
|
||||
"type": "RawImage",
|
||||
"material": "Assets/Bundles/UI/Material/HomeExplorerCutout.mat",
|
||||
"color": "#FFFFFF",
|
||||
"raycastTarget": false
|
||||
},
|
||||
{
|
||||
"type": "MonoBehaviour",
|
||||
"typeName": "HotUpdate.UI.HomeExplorerPresenter"
|
||||
@@ -132,11 +150,26 @@
|
||||
"parent": "UI_MainHUD",
|
||||
"active": true,
|
||||
"rect": {
|
||||
"anchorMin": [0.5, 0.5],
|
||||
"anchorMax": [0.5, 0.5],
|
||||
"pivot": [0.5, 0.5],
|
||||
"anchoredPosition": [0, -80],
|
||||
"sizeDelta": [220, 280]
|
||||
"anchorMin": [
|
||||
0.5,
|
||||
0.5
|
||||
],
|
||||
"anchorMax": [
|
||||
0.5,
|
||||
0.5
|
||||
],
|
||||
"pivot": [
|
||||
0.5,
|
||||
0.5
|
||||
],
|
||||
"anchoredPosition": [
|
||||
0,
|
||||
-80
|
||||
],
|
||||
"sizeDelta": [
|
||||
220,
|
||||
280
|
||||
]
|
||||
},
|
||||
"components": [
|
||||
{
|
||||
@@ -161,11 +194,26 @@
|
||||
"parent": "UI_MainHUD",
|
||||
"active": false,
|
||||
"rect": {
|
||||
"anchorMin": [0.5, 0.5],
|
||||
"anchorMax": [0.5, 0.5],
|
||||
"pivot": [0.5, 0],
|
||||
"anchoredPosition": [0, 80],
|
||||
"sizeDelta": [520, 150]
|
||||
"anchorMin": [
|
||||
0.5,
|
||||
0.5
|
||||
],
|
||||
"anchorMax": [
|
||||
0.5,
|
||||
0.5
|
||||
],
|
||||
"pivot": [
|
||||
0.5,
|
||||
0
|
||||
],
|
||||
"anchoredPosition": [
|
||||
0,
|
||||
80
|
||||
],
|
||||
"sizeDelta": [
|
||||
520,
|
||||
150
|
||||
]
|
||||
},
|
||||
"components": [
|
||||
{
|
||||
@@ -182,10 +230,22 @@
|
||||
"parent": "Panel_ExplorerTalk",
|
||||
"active": true,
|
||||
"rect": {
|
||||
"anchorMin": [0, 0],
|
||||
"anchorMax": [1, 1],
|
||||
"offsetMin": [28, 20],
|
||||
"offsetMax": [-28, -20]
|
||||
"anchorMin": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"anchorMax": [
|
||||
1,
|
||||
1
|
||||
],
|
||||
"offsetMin": [
|
||||
28,
|
||||
20
|
||||
],
|
||||
"offsetMax": [
|
||||
-28,
|
||||
-20
|
||||
]
|
||||
},
|
||||
"components": [
|
||||
{
|
||||
@@ -224,7 +284,12 @@
|
||||
460
|
||||
]
|
||||
},
|
||||
"components": []
|
||||
"components": [
|
||||
{
|
||||
"type": "MonoBehaviour",
|
||||
"typeName": "AOT.UI.UiSafeArea"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Layout_Sides",
|
||||
@@ -280,7 +345,12 @@
|
||||
600
|
||||
]
|
||||
},
|
||||
"components": []
|
||||
"components": [
|
||||
{
|
||||
"type": "MonoBehaviour",
|
||||
"typeName": "AOT.UI.UiSafeArea"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Btn_Profile",
|
||||
@@ -824,6 +894,10 @@
|
||||
"color": "#FFFFFF",
|
||||
"raycastTarget": false,
|
||||
"imageType": "Sliced"
|
||||
},
|
||||
{
|
||||
"type": "MonoBehaviour",
|
||||
"typeName": "AOT.UI.UiSafeArea"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -3385,6 +3459,10 @@
|
||||
"color": "#FFFFFF",
|
||||
"raycastTarget": true,
|
||||
"imageType": "Sliced"
|
||||
},
|
||||
{
|
||||
"type": "MonoBehaviour",
|
||||
"typeName": "AOT.UI.UiSafeArea"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# UI 图集自动化方案(AIGame 精简版)
|
||||
# UI 图集自动化方案(AIGame)
|
||||
|
||||
> 参考 AIC# `Unity_UI自动图集制作方案.md`。本仓库首期以 **目录约定 + 单图 Sprite + YooAsset** 为主;完整 SpriteAtlas 生成器作为后续里程碑。
|
||||
> 2026-10-22 移植 ClientTrunk 的 `SpriteAtalsGenerator`、`AssetBundleBuildRules.ProcessAtlas` 与 `GEngine.AtlasManager` 核心链路;适配本项目 Unity 2022.3、YooAsset 3.0.6、HybridCLR。
|
||||
|
||||
## 1. 目标
|
||||
|
||||
- 美术/AI 把切图放入约定目录。
|
||||
- 导入为 `Sprite (2D and UI)`,关闭 mipmap。
|
||||
- Prefab / 运行时按 **Sprite 短名** 引用(与 JSON `assets.sprites` 一致)。
|
||||
- 后续:按子目录自动生成 `.spriteatlas`,构建时原图与图集同包。
|
||||
- 图片导入、删除、移动后延迟合并更新;每个实际含图片的目录生成一个 `.spriteatlas`,构建时原图与图集同包。
|
||||
|
||||
## 2. 目录
|
||||
|
||||
@@ -15,7 +15,10 @@
|
||||
AIClient/Assets/Bundles/UI/Texture/
|
||||
Common/ # 通用控件(对应 UI_*_Set)
|
||||
<Module>/ # 业务专用
|
||||
AIClient/Assets/Bundles/UI/Atlas/ # (后续)自动生成的 .spriteatlas
|
||||
AIClient/Assets/Bundles/UI/Atlas/
|
||||
UI_CommonAtlas.spriteatlas
|
||||
UI_HomeAtlas.spriteatlas
|
||||
UI_PrototypeAtlas.spriteatlas
|
||||
```
|
||||
|
||||
中间产物仍可先落在 `Tools/output/`,再导入 Bundles。
|
||||
@@ -34,14 +37,50 @@ AIClient/Assets/Bundles/UI/Atlas/ # (后续)自动生成的 .spriteatlas
|
||||
- Mesh Type:`Full Rect`(九宫格)
|
||||
- 标准控件底图必须设置有效非零 Border,JSON 使用 `imageType: Sliced`;按钮各状态图同样设置。Common 的 26 张 Normal Set 控件由 `UiSpriteNineSliceRules.cs` 自动导入维护;新增控件时同步扩展规则。已有资源可执行 `Tools/UI/Apply Standard Control Nine-Slice` 后重建对应 Prefab。
|
||||
- Alpha Is Transparency:开
|
||||
- 原图尽量不压缩;压缩留给图集/平台 override
|
||||
- `UI/Texture/` 下原图由 `TexturePlatformPostprocessor` 保持 RGBA32、Compression=None,关闭 Crunch 和四个平台的原图覆盖;保留其他导入参数。平台压缩仅应用于最终 SpriteAtlas:Windows(Standalone)DXT5,iOS(iPhone)和 Android 为 ASTC 6×6,WebGL 为 ASTC 8×8,关闭 Crunch。目录外图片继续沿用平台压缩规则。
|
||||
|
||||
## 5. 后续里程碑(对齐 AIC#)
|
||||
## 5. 自动生成与构建
|
||||
|
||||
1. `SpriteAtlasGenerator`:扫描 `Texture/UI` 子目录 → `Atlas/*.spriteatlas`
|
||||
2. `AtlasEnum` / 名字索引生成
|
||||
3. YooAsset 收集规则:图集与原图同组
|
||||
4. 运行时 `SetSprite(atlas, name)` API(HotUpdate)
|
||||
5. UI Prefab 依赖图集 JSON 审计
|
||||
`Assets/Editor/UI/UiSpriteAtlasGenerator.cs` 扫描 `Texture/` 的 Texture2D,按直接父目录分组,支持 Single / Multiple Sprite。嵌套目录独立成图集,不会被父图集重复收集。目录分隔符编码为 `_s`,下划线编码为 `_u`,防止 `A/B` 与 `A_B` 同名。根目录直接放的图片归 `UI___RootAtlas`。`UiAtlasPaths` 为编辑器和运行时提供同一套路径规则。
|
||||
|
||||
在里程碑完成前,JSON→Prefab 流水线使用 **Common 单图路径** 即可闭环。
|
||||
图集采用 SpriteAtlas V1 `AlwaysOnAtlas`;最大页尺寸 2048,padding=4,不旋转、不紧密打包、不生成 mipmap,保留 Sprite Border。图过多时由 Unity 自动产生多页。必须开启 Include in Build(与参考工程一致),使当前 SBP 的 `PackAllAtlases` 建立打包关联,`StripUnusedSpriteSources` 才能剥离未压缩原图像素。图集与原图的 Sprite 对象仍由 YooAsset 同包分发,运行时加载器保留延迟绑定兼容。
|
||||
|
||||
已有图集原地更新,保留 GUID。无变化不重写;仅清理带 `AIGame.UI.GeneratedAtlas` 标签且已无源图的图集,不清空 Atlas 目录。生成前检查非 Sprite 输入、目录大小写冲突和同一图集中的重复 Sprite 名。普通导入回调只调整新导入图片的 Sprite / mipmap / alpha / NPOT 设置,不修改已有九宫格边界。
|
||||
|
||||
`Tools/UI/Generate Sprite Atlases` 可手动校验生成。`SetupUiBundleCollector.Setup` 在 Art 构建前执行生成并配置:
|
||||
|
||||
| 收集内容 | 类型 | 规则 |
|
||||
| --- | --- | --- |
|
||||
| `UI/Prefab` | MainAssetCollector | 保留原 Prefab 名地址与独立包 |
|
||||
| `UI/Atlas` | MainAssetCollector | `CollectUiAtlas` + `PackUiAtlas` |
|
||||
| `UI/Texture` | DependAssetCollector | `CollectUiAtlasTexture` + `PackUiAtlas` |
|
||||
|
||||
图集用文件名寻址;原图不额外增加短名地址,通过依赖进入其图集同名 bundle,避免跨目录重名图片引起地址冲突。既有 Art 构建入口 `BuildAndStageArt` 已调用此 Setup,无需维护第二个构建入口。Prefab 无需重建或改用图集中的克隆 Sprite。
|
||||
|
||||
## 6. 运行时
|
||||
|
||||
`UiManager.Init` 在打开 UI 前注册 `UiAtlasLoader`。Unity 发出 `SpriteAtlasManager.atlasRequested` 后,加载器从首选包、Art、DefaultPackage 中异步加载 `UI_` 前缀图集并回调绑定。打开 Prefab 时等待在途图集加载完成。请求合并,共用图集句柄和 Sprite 克隆;失败可重试;随 UI 根节点销毁注销事件、释放句柄及克隆。
|
||||
|
||||
动态换图示例(Coroutine):
|
||||
|
||||
```csharp
|
||||
yield return UiManager.Instance.Atlases.SetSpriteAsync(image, "Home", "home_ico_coin");
|
||||
// 或仅加载 Sprite:
|
||||
yield return UiManager.Instance.Atlases.LoadSpriteAsync("Common", "btn_primary_normal", sprite => { /* 使用 */ });
|
||||
```
|
||||
|
||||
目录字符串替代参考项目与具体业务耦合的 `AtlasEnum`。多个并发请求不会重复加载;同一个 Image 后发请求优先。Editor 可回退 AssetDatabase 以支持本地预览,Player 全部走 YooAsset 异步加载。
|
||||
|
||||
## 7. 验证
|
||||
|
||||
`AIClient/AgentScripts/VerifyUiAtlases.cs` 通过 unity-pipeline 执行:`Editor` 校验平台参数、打包后 Sprite / Border、GUID 幂等与 Art 实际构建映射;`AutomaticChanges` 使用临时图片验证导入/移动/删除自动维护后清理;`BuildIsolated` 只向 `Tools/output/ui_atlas` 构建独立验证包,不替换 CDN / StreamingAssets;`PrepareRuntimeScene`/`Runtime`/`RestoreRuntimeScene` 在空场景实测真实资源包与禁用 Editor fallback 的异步加载,随后恢复原场景。回执同目录。
|
||||
|
||||
2026-10-22 验证通过:编辑器 394 项、自动增删移动 6 项、真实 WebGL 资源包的 Editor Play Mode 加载 12 项。3 个图集分别覆盖 Common 38/Home 16/Prototype 13 张图片;二次生成 updated=0,原 GUID 和九宫格边界保留。运行时验证包含 Prefab 自动绑定、并发 Sprite 缓存、Image 后发请求优先和销毁释放;没有使用 AssetDatabase fallback。`dialog.png` 为真实包内对话框的 540×960 离屏渲染,面板/按钮/关闭图标显示正常。最终恢复 Boot 场景,无未保存内容;未执行浏览器或微信真机验证。
|
||||
|
||||
同日原图压缩规则调整后,`ApplyUncompressedSources` 已迁移全部 67 张原图为未压缩 RGBA32,四个平台覆盖关闭,GUID 和 Border 保留;更新后的 Editor 796 项检查、自动增删移动 7 项检查均通过,最终三个图集的平台压缩规则保留。目录外图片另通过 13 项导入/重新导入检查,继续使用原平台压缩规则。原图迁移回执见 `Tools/output/ui_atlas/source_uncompressed.json`。
|
||||
|
||||
同日修复包体膨胀:旧的 `Include in Build=false` 导致 SBP 保留源图像素。真实 Art Home 包 `a6442d30c6c5d555575f90ae44067db5` 为 3,044,323 字节,并包含 16 个 RGBA32 Texture2D。恢复 `Include in Build=true` 后,隔离验证包为 271,138 字节,源 Texture2D 为 0,16 个 Sprite 保留;运行时真实 Home 页为 2048×1024、ASTC_8x8,实际包内 UI 渲染/动态换图/释放通过。Atlas 预览约 0.5 MiB 是纹理数据大小,bundle 经 LZ4 后可更小。`AuditUiAtlasBundle.cs` / `Tools/output/ui_atlas/size/` 提供前后对象检查与字节数,Runtime 检查已增加非空实际纹理断言。正式 Art 包须重新构建后采用本次修复。
|
||||
|
||||
随后完整 Art 构建还发现旧缓存问题:`20261022.142050` 的 Home 包 `ef703e962fe2343aadd151413a3e2114` 仍为 2,932,774 字节/15 个 RGBA32 原图。独立验证包不包含正式 Art 的全部 Prefab,因此此前的验证不能覆盖这些旧依赖缓存。通过 Unity 官方 `BuildCache.PurgeCache(false)` 清理 SBP 缓存后,正式 Art `20261022.142513` 的 Home 包降为 271,138 字节/0 张源 Texture2D;接着保留缓存的正式增量构建 `20261022.142810` 同样通过,均已暂存到本地 StreamingAssets 与 CDN 目录。
|
||||
|
||||
`UiAtlasBuildValidation.Inspect` 在正式 Art 构建完成后检查所有生成图集 bundle 的真实对象。若发现残留原图,`BuildAndStageArt` 自动清理 SBP 缓存,以 `.atlasfix` 版本后缀重建一次;仍有残留则返回失败,禁止暂存异常包。不会仅凭图集 Inspector 或构建映射判断包体正确。`AuditUiAtlasBundle.VerifyProductionGuard` 已确认能检出用户提供的坏包,并验证正式三个图集包均无源纹理;回执 `Tools/output/ui_atlas/size/production_guard.json`。
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
| 流水线 | 产物 | 文档 |
|
||||
| --- | --- | --- |
|
||||
| **A. JSON → Prefab** | 业务 UI Prefab | `Doc/Rule/UIGenerationRules.md`、`UIGenerationPrompt.md` |
|
||||
| **B. UI 图集 / 切图** | Common 控件贴图 +(后续)SpriteAtlas | `Doc/UI_*_Set.md`、`Doc/UI_Atlas_Pipeline.md` |
|
||||
| **B. UI 图集 / 切图** | 各目录切图 → 自动 SpriteAtlas → YooAsset 同包 | `Doc/UI_*_Set.md`、`Doc/UI_Atlas_Pipeline.md` |
|
||||
|
||||
风格与控件视觉:`Doc/Design/UI_Design_Principles.md` + `Doc/Design/ui_design.jpg`。
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
- `Tools/UI/Generate All Prefabs From JSON`
|
||||
- `Tools/UI/Convert Changed JSON Prefabs Now`
|
||||
- `Tools/UI/Auto Convert JSON On Focus`(默认开启)
|
||||
- `Tools/UI/Generate Sprite Atlases`(手动校验;图片变更及 Art 构建前也会自动更新)
|
||||
|
||||
Prefab / 导入设置须遵守 `UNITY-GUIDE.md`:Agent 不手改 `.prefab`,用本转换器或 Pipeline。
|
||||
|
||||
@@ -62,8 +63,17 @@ Prefab / 导入设置须遵守 `UNITY-GUIDE.md`:Agent 不手改 `.prefab`,
|
||||
|
||||
生成脚本与模型规则见 `ResourceCreate.md`。
|
||||
|
||||
## 6. 首期不做 / 后续
|
||||
## 6. 图集接入与剩余能力
|
||||
|
||||
- 首期:JSON→Prefab + Common 切图目录约定;Sprite 可先单图导入。
|
||||
- 后续:按目录自动打 `.spriteatlas`、AtlasEnum、YooAsset 原图绑定(见 `Doc/UI_Atlas_Pipeline.md`)。
|
||||
- JSON→Prefab 继续引用原图 Sprite;按原图所在目录自动生成 `Assets/Bundles/UI/Atlas/UI_*Atlas.spriteatlas`,原图与图集同包,通过 `atlasRequested` 异步绑定(见 `Doc/UI_Atlas_Pipeline.md`)。
|
||||
- 动态换图使用 `UiManager.Instance.Atlases.SetSpriteAsync(image, "Common", "btn_primary_normal")`;目录名作为索引,无需维护参考工程的业务 `AtlasEnum`。
|
||||
- 转换器未实现:`Toggle` / `Slider` / `Scrollbar` / `TMP_Dropdown`(可用 Image+Button 骨架)。
|
||||
|
||||
## 7. 移动端安全区与角色预览
|
||||
|
||||
- `UI_MainHUD.json` 在 Layout_Top、Panel_Top、Layout_Bottom 和 Panel_Reconnect 上声明 `AOT.UI.UiSafeArea`。组件结合 Unity Screen.safeArea 与微信 getWindowInfo.safeArea、getMenuButtonBoundingClientRect,下移顶部控件到胶囊底部加 8 逻辑像素处,并避开底部手势区;背景仍为全屏铺满。
|
||||
- `UiSafeArea.jslib` 使用微信逻辑像素归一化,与 Unity 物理像素/DPR 解耦;旧客户端回退 getSystemInfoSync 和胶囊行预留。AOT 组件独立保留在 `Assets/AOT/link.xml`,不会被 HybridCLR Gen All 覆盖。
|
||||
- JSON→Prefab 解析优先使用 `assets.sprites` 中的明确路径,声明的 Sprite 缺失即生成失败;支持 `Bg/` 等独立目录。当前营地背景为 `Assets/Bundles/UI/Bg/home_camp.png`,不属于图集输入目录。
|
||||
- `RawImage` 支持 `material`、`color`、`raycastTarget`。ExplorerStage 明确引用 `Assets/Bundles/UI/Material/HomeExplorerCutout.mat`,材质和 Shader 随 Prefab 依赖进入 Art;运行时不再通过 Shader.Find 查找抠底着色器。材质不可用时隐藏角色预览,避免显示相机底色。
|
||||
- 启动 GameplayBootstrap 只初始化 UI,不自动加载 TownSquare/CaoCao 预览世界;角色相关资源和按玩法加载的战斗场景保留。
|
||||
- 验证入口:`Tools/verify_ui_safe_area.js`;`AIClient/AgentScripts/VerifyHomeMobileUi.cs` 分步准备/启动/截图/恢复,避免长时间等待屏幕背缓冲。回执和普通屏、刘海屏、安卓长屏截图在 `Tools/output/home_mobile/`。
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
# 微信小游戏导出、导入与首包 CDN
|
||||
|
||||
## 开发者工具入口
|
||||
|
||||
导出菜单为 `AIGame/WeChat/Export Base Package`,输出到 `AIClient/Build/WeChat/Base/`。
|
||||
|
||||
- `minigame/` 是开发者工具项目,包含 `game.js`、`game.json`。
|
||||
- `webgl/` 是网站资源目录。打开它或父目录时若没有正确配置源码路径,会出现找不到 `game.json`。
|
||||
- 导出后现在同时生成父目录 `project.config.json`,指定 `miniprogramRoot: "minigame/"`;因此可以打开 Base 或 minigame。
|
||||
- 父目录入口沿用 SDK 编译配置及符号文件排除规则,保留已有 AppID;不改私有配置。
|
||||
- `AIGame/WeChat/Open Exported MiniGame Folder` 定位正确的项目目录;旧包可以执行 `Repair Exported DevTools Project`。
|
||||
|
||||
## 启动资源下载 404
|
||||
|
||||
当前首包 CDN 为 `https://www.xworld.ren/game/Friends/webgl/`,与生产热更新目录位于同一个网站目录。
|
||||
导出菜单会通过 Unity API 写入 MiniGameConfig 的 CDN,并由 SDK 写入 `minigame/game.js` 的 `DATA_CDN`。
|
||||
修改现有包配置可用 `AIGame/WeChat/Refresh Exported Config (No Build)`,无需重新编译 Player。
|
||||
|
||||
**导出只生成本地文件,不会自动上传网站;重新生成底包不等于必须重新上传全部资源。** 首次部署或缺少文件时,将 `AIClient/Build/WeChat/Base/webgl/` 中需要的资源上传到网站 `/game/Friends/webgl/`,保持相对路径,不要额外嵌套一层 webgl。
|
||||
|
||||
| 本地相对 webgl 的路径 | 对外 URL 路径 |
|
||||
| --- | --- |
|
||||
| `<hash>.webgl.data.unityweb.bin.txt` | `/game/Friends/webgl/<hash>.webgl.data.unityweb.bin.txt` |
|
||||
| `StreamingAssets/cdn/version.json` | `/game/Friends/webgl/StreamingAssets/cdn/version.json` |
|
||||
| `StreamingAssets/yoo/...` | `/game/Friends/webgl/StreamingAssets/yoo/...` |
|
||||
|
||||
`base-package-report.txt` 会列出本次实际首包文件和完整下载地址。
|
||||
2026-10-22 的包为 `1ddb5fcad4415dd3.webgl.data.unityweb.bin.txt`,10,084,442 字节;排查时对应生产 URL 返回 404,而现有 `/game/Friends/webgl/cdn/version.json` 返回 200。
|
||||
SDK 根据 Unity data 文件内容计算哈希,并写入文件名和 `game.js` 的 `DATA_FILE_MD5`。重新构建后,如果哈希未变且现有 CDN 的完整 URL 可访问,直接复用,无需重复上传;哈希变化时才需要补充对应的新文件。未变的 YooAsset 业务资源包同样无需重复上传。场景或壳内资源/构建设置变化可能影响 Unity data,不能仅凭业务资源未修改就判断其哈希一定不变。
|
||||
|
||||
排查 404 时,先核对 `DATA_CDN` 与既有文件部署位置,再核对 `DATA_FILE_MD5` 对应的文件是否存在。404 本身不能证明资源内容发生了变化。修正路径或补齐缺失文件后,确认完整 URL 返回 200,再清理开发者工具缓存并编译。
|
||||
|
||||
Unity 首包的 `DATA_CDN` 与游戏进入 Boot 后使用的 YooAsset `version.json`/Art/DefaultPackage 是两阶段下载。当前 YooAsset 生产清单地址仍为 `/game/Friends/webgl/cdn/version.json`,资源根为 `/game/Friends/webgl/yoo/DefaultPackage`。
|
||||
|
||||
## 验证
|
||||
|
||||
`AIClient/AgentScripts/VerifyWeChatExport.cs` 通过 Unity Pipeline 刷新并验证现有包配置,检查父目录入口、AppID、SDK 排除规则、私有配置与 webgl 资源保留、重复刷新幂等性。
|
||||
回执及修改前备份在 `Tools/output/wechat_export/`。本次本地验证通过,服务器首包文件尚需发布。
|
||||
|
||||
## YooAsset 默认构造函数被裁剪
|
||||
|
||||
2026-10-22 小游戏启动出现 `MissingMethodException: Default constructor not found for type YooAsset.WebNetworkFileSystem`。
|
||||
YooAsset 3.0.6 的 `FileSystemParameters.CreateFileSystem` 使用 `Type.GetType` 和 `Activator.CreateInstance` 创建实例。
|
||||
实际检查完整与 WebGL ManagedStripped 程序集,确认 WebNetwork/Builtin/Sandbox 三种文件系统在完整程序集中有默认构造函数,裁剪后类型仍存在、默认构造函数已移除。
|
||||
|
||||
`AIClient/Assets/AOT/link.xml` 仅保留项目使用的这三个文件系统的无参构造函数,不全量保留 YooAsset,也不降低全局裁剪级别。
|
||||
该文件独立于 `Assets/HybridCLRGenerate/link.xml`,后续 HybridCLR Gen All 不会覆盖它。Unity 保留规则见[官方托管代码裁剪说明](https://docs.unity3d.com/cn/2022.3/Manual/ManagedCodeStripping.html)。
|
||||
|
||||
`AIClient/AgentScripts/VerifyYooAssetStripping.cs`:`Before` 记录裁剪前后构造函数;`BuildAndVerify` 执行正式 Export Base Package,检查新裁剪 DLL 中的构造函数及方法体、新生成的原生构造函数,并对比业务 bundle 与启动 data 的内容哈希。
|
||||
回执目录为 `Tools/output/yooasset_stripping/`。底包构造函数修复需要新的 wasm 代码生效;未改动的业务资源包继续复用。
|
||||
|
||||
本次 20:06 正式导出与产物检查通过:三种文件系统无参构造函数及方法体均已保留,IL2CPP 已生成 WebNetworkFileSystem 构造函数;业务 bundle 内容哈希全部未变。启动 data 实测由 10,084,442 字节变为 10,084,535 字节,文件名变为 `c58ae17711192f12.webgl.data.unityweb.bin.txt`;需要将这个新增启动文件同步到现有 `/game/Friends/webgl/`,无需重传未变业务 bundle。未自动发布服务器,微信开发者工具运行尚待复测。
|
||||
|
||||
## 主界面移动端修复产物(2026-10-22 20:49)
|
||||
|
||||
启动不再自动加载 TownSquare/CaoCao。主界面角色预览材质通过 Prefab 依赖进入 Art,顶部和底部布局使用设备/微信安全区,详见 `UI_AutoGen_Overview.md`。
|
||||
三个屏幕布局与按钮命中、GPU 抠底、实际启动器无 3D 预加载检查通过;8 组微信窗口/胶囊/旧接口/DPR 用例通过。原 Boot 场景已恢复。
|
||||
|
||||
新底包已导出到 `AIClient/Build/WeChat/Base/minigame/`,构建成功并确认原生/JS 安全区桥接均包含。新首包为 `e33b1380f2e627d5.webgl.data.unityweb.bin.txt`(14,785,194 字节)。本次业务 UI 和热更代码有实际修改,需部署对应 Art/DefaultPackage 更新;相对上一构建仅 3 个 Art bundle、1 个热更 rawfile 及相应清单变化。
|
||||
|
||||
`Tools/output/home_mobile/deployment.json` 列出需发布文件、本地路径与目标 URL(排除构建报告和日志),资源文件先于总版本清单发布。该适配包含新的 AOT 组件,应搭配新底包。文件目前只在本地构建/暂存,未上传 CDN,微信开发者工具/真机需重新编译复测。
|
||||
|
||||
|
||||
## 2026-10-22:小游戏网络与启动遮罩修复
|
||||
|
||||
- `WsClient` 原 WebGL 分支只有“不支持 ClientWebSocket”的占位。现在通过 `Assets/AOT/Scripts/Boot/WebSocketBridge.cs` 与 `Assets/Plugins/WebGL/GameWebSocket.jslib` 使用微信 `wx.connectSocket` / `SocketTask`;普通浏览器回退到 WebSocket。轮询收发在 Unity 主线程处理,包含连接超时、指数退避、手动重连和关闭清理。AOT 原生导入独立保留,避免热更 DLL 直接声明 P/Invoke。
|
||||
- WebGL 的 `GameNet.Bind` 对本机或非 HTTPS/WSS 地址回退为 `https://game.xworld.ren` 和 `wss://game.xworld.ren/ws?pid={pid}&token={token}`,同时更新 BootContext,供业务 HTTP 使用。编辑器本机配置保留;自定义 HTTPS/WSS 远端地址保留。
|
||||
- 截图中首次 `/login` 返回 401 后出现 `authed pid=...`,对应游客首次登录失败后自动注册成功,并非最终鉴权失败。ASTC 不支持后软件解压属于纹理兼容提示,与 WebSocket 占位错误不同。
|
||||
- 原 Boot 固定两帧就隐藏遮罩,异步加载主界面时会暴露空白。现在等待热更通过 BootContext 通知主界面就绪;缺少 HUD 或超时保留可见错误提示,该信号不依赖登录或 WebSocket 成功。
|
||||
- 验证:`node Tools/verify_game_websocket.js` 的 8 组实际 JS 桥接用例;`dotnet run --project Tools/Tests/WebSocket/WebSocket.csproj` 编译并执行实际 UNITY_WEBGL WsClient;Pipeline 的 `VerifyMiniGameNetwork.Endpoints` / `CheckUiReady` 与 `VerifyHomeMobileUi.CheckReady`。隔离场景验证完成后恢复原 Boot 场景。
|
||||
- 新增 AOT / JS 桥接与上下文,必须搭配新底包和本次 DefaultPackage 热更,不能只刷新导出配置或只替换旧底包的热更 DLL。Art 未修改,无需重新构建或重复上传未变的 Art bundles。构建与发布清单见 `Tools/output/minigame_network/`;本地构建不自动上传 CDN。微信后台需配置 request 合法域名 `https://game.xworld.ren`、socket 合法域名 `wss://game.xworld.ren`。开发者工具和真机仍需运行复测。
|
||||
本轮最终本地构建已成功(约 232 秒),底包目录 `AIClient/Build/WeChat/Base/minigame/`。首包数据 `06add2285b23eace.webgl.data.unityweb.bin.txt`(14,785,694 字节);DefaultPackage 清单 `0e3722bbb19457d47bac35bbd4b516a7`,热更文件 `d34a46086ecefa40084479f551820a4e.rawfile`(253,440 字节)。Art 仍为 `006c201e92439eb03ae12d84b86f8fa6`,未变。已验证 4 个平台桥接原生导入、IL2CPP 返回字符串释放、生成 framework 中的桥接、Raw DLL 内容和清单 MD5;原 Boot 场景恢复,编辑器停止且编译完成。`Tools/output/minigame_network/deployment.json` 给出逐文件来源/URL,先发布资源文件,再发布总版本清单;未上传远端,未做微信真机联调。
|
||||
后续线上核对:新首包 `06add2285b23eace.webgl.data.unityweb.bin.txt` 已返回 200;但 `/cdn/version.json` 仍下发旧热更版本 `5d00808a861cf2d9d5696eaafea5b896`,新 DefaultPackage 清单返回 404,导致新壳继续运行旧 DLL。已将本次缺少的 4 个 DefaultPackage 文件和 `cdn/version.json` 按网站路径整理到 `Tools/output/minigame_network/upload_patch/`,共 254,085 字节。将目录内容上传到网站 `/game/Friends/webgl/`,先 `yoo/DefaultPackage`,最后 `cdn/version.json`;首包与 Art 无需重复上传。仅本地整理,未执行上传。
|
||||
## 2026-10-22:玩法 API 404 与预览紫色区域
|
||||
|
||||
线上新热更已生效,WebSocket 和主界面加载正常;`https://game.xworld.ren/game/state` 仍返回 404,且响应为 Kestrel。本仓库的完整玩法服务为 AIServer,Windows Server 上传/启动方式见 `AIServer/deploy/windows/README.md`。本地已生成并验证 `Tools/output/server_release/AIServer-Windows-x64.zip`,不含开发数据库,不自动替换旧服务;全部游戏域名路由需切到同一新后端,旧后端数据需要单独迁移。
|
||||
|
||||
实际 Art 材质仍保存旧抠底色 (0.07,0.02,0.09),而热更代码改为紫色清屏,导致矩形显现;现已改为读取运行时材质 `_Key`。旧/新颜色的 GPU discard 与前景保留、隔离预览截图通过。客户端修复仅更新热更代码,无需底包/Art 重打:上传 `Tools/output/server_release/Client-CDN-Patch.zip` 解压内容到 `/game/Friends/webgl/`,先 `yoo/DefaultPackage`,最后 `cdn/version.json`。新 packVersion `587e28dfd1f166d117eadd24afa8efa1`,仍搭配既有支持 WebSocket 的新底包。两个 ZIP 均未上传线上。
|
||||
## BuddyDefense 15888 部署地址(当前)
|
||||
|
||||
游戏服务已改为 `https://BuddyDefense.xworld.ren:15888` / `wss://BuddyDefense.xworld.ren:15888/ws?pid={pid}&token={token}`,CDN 资源路径维持既有部署。本轮 packVersion `d36750d301123c62fd6f673f324137a5`,发布文件 `Tools/output/server_release/Client-BuddyDefense-15888.zip`,仍先发布 yoo/DefaultPackage、最后发布 cdn/version.json。新常量会在编译时内联进热更 DLL,不增加运行时 AOT API 依赖;既有支持 WebSocket 的底包可直接更新热更,无需重打。
|
||||
|
||||
服务器包 `AIServer-BuddyDefense-15888.zip` 默认监听 `127.0.0.1:15888`。用户现有 Caddy 站点也监听 15888,需要加 `bind` 绑定服务器实际非环回网卡 IPv4,避免通配监听占用环回端口;`New-CaddySite.ps1` 在服务器运行可生成准确片段,保留 transport http 的 read_timeout/write_timeout 0。云服务器存在公网 NAT 时使用网卡私网地址绑定,域名 DNS 指向公网地址。更新已运行任务时先使用 Stop-Server.ps1,再安装新开机任务;更改 Caddy 后验证并 reload。需配置新域名的 DNS、证书及公网 TCP 15888 放行。当前本地验证正常,未部署远端。
|
||||
客户端 ZIP 的网站发布辅助:将 `Publish-BuddyDefenseClient.ps1` 与 `Client-BuddyDefense-15888.zip` 放在同一目录,管理员 PowerShell 执行 `powershell.exe -ExecutionPolicy Bypass -File .\Publish-BuddyDefenseClient.ps1 -WebglRoot "网站中/game/Friends/webgl/对应的实际目录"`。也可先加 `-WhatIf` 检查。脚本校验清单 MD5,最后发布总版本;该目录属于静态资源站点,不是 AIServer 程序目录。发布后通过公网 `https://www.xworld.ren/game/Friends/webgl/cdn/version.json` 确认 packVersion 为 `d36750d301123c62fd6f673f324137a5`。新游戏域名的 DNS/TLS/15888 入口须先可访问。
|
||||
### 2026-10-23 任务面板打开异常
|
||||
TMP 会在多段文字下生成同名的 TMP_SubMeshUI 字体渲染子节点;PrototypeFlow.Panel 原先索引全部 Transform 时抛出重复键异常。现按组件排除内部渲染节点,保留业务节点绑定与重名校验。19 个业务面板(含任务、签到、背包、好友)预览场景验证通过。
|
||||
本次仅发布 DefaultPackage 热更:packVersion `613942741fd3be253c86145d7451031c`,Art 保持 `006c201e92439eb03ae12d84b86f8fa6`。将最新 `Tools/output/server_release/Client-BuddyDefense-15888.zip` 放到服务器发布脚本旁,继续使用 `Publish-BuddyDefenseClient.ps1 -WebglRoot "C:\XWorld\CDN\Friends\webgl"`,脚本先写资源后更新 cdn/version.json。无需重打底包。未由 Agent 上传线上,发布后重新进入小游戏验证点击任务。
|
||||