@microi.net/cli 5.9.1 → 5.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/LICENSE +21 -21
- package/README.md +71 -71
- package/assets/build-meta.json +5 -5
- package/assets/feature-matrix.json +138 -138
- package/assets/logo.svg +4 -4
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/microi-codex-broker.js +466 -450
- package/scripts/microi-codex-router.js +634 -618
- package/scripts/microi-skills.meta.json +386 -377
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +148 -123
- package/skills/README.md +287 -287
- package/skills/ai-engine/SKILL.md +269 -269
- package/skills/ai-engine/agents/openai.yaml +4 -4
- package/skills/ai-engine/references/ai-employees.md +48 -48
- package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
- package/skills/ai-platform-governance/SKILL.md +177 -177
- package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
- package/skills/app-store/SKILL.md +525 -525
- package/skills/app-store/agents/openai.yaml +4 -4
- package/skills/business-blueprint/SKILL.md +193 -193
- package/skills/datasource-engine/SKILL.md +93 -93
- package/skills/datasource-engine/agents/openai.yaml +4 -4
- package/skills/dos-orm/SKILL.md +101 -95
- package/skills/dos-orm/references/api-reference.md +229 -229
- package/skills/email-engine/SKILL.md +81 -81
- package/skills/email-engine/references/v8-email.md +34 -34
- package/skills/job-engine/SKILL.md +176 -176
- package/skills/job-engine/agents/openai.yaml +4 -4
- package/skills/message-notification/SKILL.md +156 -156
- package/skills/message-notification/agents/openai.yaml +5 -5
- package/skills/message-notification/references/contracts.md +102 -102
- package/skills/microi/SKILL.md +14 -14
- package/skills/microi-ai-app-auth.js +652 -652
- package/skills/microi-ai-application/SKILL.md +115 -115
- package/skills/microi-ai-application/agents/openai.yaml +4 -4
- package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
- package/skills/microi-client-frontend/SKILL.md +242 -242
- package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +144 -144
- package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +196 -196
- package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +167 -167
- package/skills/microi-codex-installer/SKILL.md +231 -231
- package/skills/microi-codex-installer/agents/openai.yaml +7 -7
- package/skills/microi-datasource-mapping/SKILL.md +122 -122
- package/skills/microi-db-schema/SKILL.md +175 -175
- package/skills/microi-db-schema/agents/openai.yaml +4 -4
- package/skills/microi-db-schema/references/core-tables.md +695 -695
- package/skills/microi-db-schema/references/form-component-options.md +256 -256
- package/skills/microi-db-schema/references/schema-overview.md +202 -202
- package/skills/microi-db-schema/references/schema.md +646 -646
- package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
- package/skills/microi-deployment/SKILL.md +239 -220
- package/skills/microi-deployment/references/deployment-matrix.md +109 -109
- package/skills/microi-docs-coverage/SKILL.md +133 -133
- package/skills/microi-docs-coverage/references/capability-map.md +90 -90
- package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
- package/skills/microi-form-engine/SKILL.md +338 -333
- package/skills/microi-form-engine/references/component-catalog.md +218 -218
- package/skills/microi-form-engine/references/data-source-events.md +124 -124
- package/skills/microi-frontend-sdk/SKILL.md +194 -194
- package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +176 -176
- package/skills/microi-left-right-layout/SKILL.md +141 -141
- package/skills/microi-microservice/SKILL.md +330 -328
- package/skills/microi-microservice/references/runtime-delivery.md +278 -278
- package/skills/microi-mobile-app-quality/SKILL.md +203 -197
- package/skills/microi-mobile-app-quality/references/mobile-first-delivery.md +75 -0
- package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +227 -224
- package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +129 -128
- package/skills/microi-solution-quotation/SKILL.md +78 -78
- package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
- package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
- package/skills/microi-sso/SKILL.md +95 -91
- package/skills/microi-sso/references/acceptance.md +51 -49
- package/skills/microi-sso/references/configuration-and-security.md +53 -53
- package/skills/microi-sso/references/inbound.md +53 -53
- package/skills/microi-sso/references/outbound.md +43 -39
- package/skills/microi-ui/SKILL.md +192 -192
- package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +183 -183
- package/skills/microi-uniapp-frontend/SKILL.md +206 -199
- package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +261 -261
- package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +154 -154
- package/skills/microi.v8.js +1921 -1921
- package/skills/module-engine/SKILL.md +255 -255
- package/skills/module-engine/references/module-config.md +204 -204
- package/skills/ocr-engine/SKILL.md +113 -113
- package/skills/ocr-engine/agents/openai.yaml +4 -4
- package/skills/page-engine/SKILL.md +206 -206
- package/skills/page-engine/examples/compact-dashboard.json +1444 -1444
- package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +234 -234
- package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +60 -60
- package/skills/performance-testing/SKILL.md +227 -221
- package/skills/playwright-e2e/SKILL.md +197 -196
- package/skills/playwright-e2e/references/progressive-01-/345/205/250/350/207/252/345/212/250/347/231/273/345/275/225-/345/205/215/351/252/214/350/257/201/347/240/201-/344/275/206/344/270/215/345/205/215/345/257/206/347/240/201-/345/277/205/350/257/273.md +173 -173
- package/skills/playwright-e2e/references/progressive-02-/346/226/207/345/255/227/345/257/271/346/257/224/345/272/246/344/270/216/345/217/257/350/257/273/346/200/247/350/207/252/345/212/250/345/214/226/346/243/200/346/237/245-/345/277/205/345/201/232.md +183 -183
- package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
- package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
- package/skills/print-engine/SKILL.md +259 -259
- package/skills/production-readonly-audit/SKILL.md +41 -41
- package/skills/report-engine/SKILL.md +71 -71
- package/skills/report-engine/agents/openai.yaml +4 -4
- package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
- package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
- package/skills/scripts/sync-embedded-skills.mjs +46 -46
- package/skills/scripts/validate-progressive-disclosure.mjs +57 -57
- package/skills/search-engine/SKILL.md +75 -75
- package/skills/search-engine/agents/openai.yaml +4 -4
- package/skills/spider-engine/SKILL.md +190 -190
- package/skills/system-observability/SKILL.md +259 -246
- package/skills/system-observability/references/memory-incident-triage.md +77 -77
- package/skills/translate-engine/SKILL.md +140 -140
- package/skills/translate-engine/agents/openai.yaml +4 -4
- package/skills/ui-design/SKILL.md +223 -223
- package/skills/ui-design/assets/pattern-showcase/app.js +54 -54
- package/skills/ui-design/assets/pattern-showcase/index.html +163 -163
- package/skills/ui-design/assets/pattern-showcase/styles.css +311 -311
- package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
- package/skills/ui-design/references/design-pattern-library.md +184 -184
- package/skills/ui-design/references/mci-design-contract.md +163 -163
- package/skills/ui-design/references/motion-and-media.md +78 -78
- package/skills/ui-design/references/product-flow-recipes.md +94 -94
- package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +218 -218
- package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +164 -164
- package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +235 -235
- package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +152 -152
- package/skills/ui-design/references/progressive-05-/347/247/273/345/212/250/347/253/257/344/270/223/347/224/250/350/247/204/350/214/203.md +238 -238
- package/skills/ui-design/references/progressive-06-/344/270/273/351/242/230/345/210/207/346/215/242/345/256/236/347/216/260.md +194 -194
- package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +207 -207
- package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +142 -142
- package/skills/uniapp-mall-assets/SKILL.md +176 -176
- package/skills/unity-integration/SKILL.md +178 -171
- package/skills/unity-integration/agents/openai.yaml +4 -4
- package/skills/unity-integration/references/ai-app-delivery.md +119 -119
- package/skills/unity-integration/references/sdk-api.md +82 -82
- package/skills/unity-integration/references/toolbox-migration.md +66 -66
- package/skills/unity-integration/references/webgl-hosting.md +57 -57
- package/skills/v8-api-config/SKILL.md +388 -388
- package/skills/v8-cache-pattern/SKILL.md +312 -312
- package/skills/v8-crud-api/SKILL.md +179 -178
- package/skills/v8-crud-api/references/progressive-01-/346/237/245/350/257/242/345/210/227/350/241/250-/345/210/206/351/241/265.md +226 -226
- package/skills/v8-crud-api/references/progressive-02-where-/346/235/241/344/273/266/350/257/255/346/263/225/351/200/237/346/237/245.md +49 -49
- package/skills/v8-debugging/SKILL.md +284 -284
- package/skills/v8-explorer-tree/SKILL.md +228 -228
- package/skills/v8-export-import/SKILL.md +219 -219
- package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +211 -211
- package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
- package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +42 -42
- package/skills/v8-file-upload/SKILL.md +255 -284
- package/skills/v8-file-upload/references/cdn-alias-repair.md +13 -0
- package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +263 -263
- package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +161 -161
- package/skills/v8-file-upload/references/progressive-03-/347/251/272/347/233/256/345/275/225/346/240/207/350/256/260/344/270/216/350/277/234/347/250/213/344/270/213/350/275/275.md +36 -0
- package/skills/v8-formengine-http/SKILL.md +238 -238
- package/skills/v8-frontend-events/SKILL.md +180 -180
- package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
- package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
- package/skills/v8-http-integration/SKILL.md +182 -182
- package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
- package/skills/v8-http-integration/references/progressive-02-/351/224/231/350/257/257/345/244/204/347/220/206/346/250/241/345/274/217.md +44 -44
- package/skills/v8-image-processing/SKILL.md +190 -190
- package/skills/v8-image-processing/agents/openai.yaml +4 -4
- package/skills/v8-image-processing/references/api-reference.md +623 -623
- package/skills/v8-menu-buttons/SKILL.md +186 -186
- package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +222 -222
- package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +228 -228
- package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +104 -104
- package/skills/v8-mongodb/SKILL.md +200 -200
- package/skills/v8-mq-mqtt/SKILL.md +178 -176
- package/skills/v8-mq-mqtt/references/mqtt-production.md +352 -342
- package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
- package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
- package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
- package/skills/v8-security/SKILL.md +227 -210
- package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +200 -200
- package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +160 -160
- package/skills/v8-sql-query/SKILL.md +302 -302
- package/skills/v8-table-event/SKILL.md +176 -176
- package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +216 -216
- package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +46 -46
- package/skills/v8-tcp-integration/SKILL.md +158 -147
- package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
- package/skills/v8-template-engine/SKILL.md +167 -167
- package/skills/v8-utilities/SKILL.md +104 -104
- package/skills/v8-utilities/references/client-api-index.md +143 -143
- package/skills/v8-utilities/references/platform-http-routes.md +83 -83
- package/skills/v8-utilities/references/server-api-index.md +188 -188
- package/skills/v8-workflow/SKILL.md +252 -252
- package/skills/v8-workflow/references/progressive-01-/350/212/202/347/202/271/345/274/200/345/247/213-v8-/344/272/213/344/273/266.md +180 -180
- package/skills/v8-workflow/references/workflow-configuration.md +49 -49
- package/skills/vision-engine/SKILL.md +160 -160
- package/skills/vision-engine/agents/openai.yaml +4 -4
- package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
- package/skills/workspace-conventions/SKILL.md +13 -13
- package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +2 -2
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
# Unity AI 应用与商城交付
|
|
2
|
-
|
|
3
|
-
## 唯一源码
|
|
4
|
-
|
|
5
|
-
官方 AI 应用源码放在当前官方连接对应的:
|
|
6
|
-
|
|
7
|
-
```text
|
|
8
|
-
Microi-V8-Engine/<connection>/<product>/AI应用/<appKey>/
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
同一应用的 Vue 外壳、Unity 构建接入、V8 源码、Manifest、资源策略、测试和发布合约都从这里生成。Unity 工程可以保留服务端镜像,但必须由唯一源码生成并做一致性检查。
|
|
12
|
-
|
|
13
|
-
最小文件:
|
|
14
|
-
|
|
15
|
-
```text
|
|
16
|
-
.microi-micro-app.json
|
|
17
|
-
app.json
|
|
18
|
-
package.json
|
|
19
|
-
microi.routes.json
|
|
20
|
-
package-contract.json
|
|
21
|
-
resource-policies.json
|
|
22
|
-
system.manifest.json
|
|
23
|
-
src/
|
|
24
|
-
public/
|
|
25
|
-
server/engines/
|
|
26
|
-
scripts/
|
|
27
|
-
tests/
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Web 外壳
|
|
31
|
-
|
|
32
|
-
- Vue 3 + Vite + TypeScript。
|
|
33
|
-
- 复用工作区标准 `microi.v8.js` 与 `microi-ai-app-auth.js`,不要复制改造出第二套认证协议。
|
|
34
|
-
- 匿名模式可以承载公开多人玩法,但必须使用服务端签发、只存哈希、可过期的会话秘密;个人持久化接口仍要求 DiyToken。
|
|
35
|
-
- `ApplicationType=Web`,独立入口为 `index.html`。
|
|
36
|
-
- 构建状态明确区分 `available` 与 `publishable`;无真实 Unity WASM/Data 时禁止正式发布。
|
|
37
|
-
- WebGL 公屏优先使用可访问的 DOM 输入控件,并在 Unity Player 将 `WebGLInput.captureAllKeyboardInput` 设为 `false`;输入区同时隔离键盘、`beforeinput`、组合输入与指针事件。Unity 6 若未向 Player 编译响应文件引用 `UnityEngine.WebGLModule`,可用 `link.xml` 保留类型后反射设置,并必须以真实键盘输入回归。Windows 可使用原生 UI/UIToolkit。不要在外壳和 Unity 中重复绘制同一组操作提示。
|
|
38
|
-
- 语音字幕由真实播放器时间轴逐 cue 驱动,中英文分行放在底部安全区;WebGL DOM 与 Windows 原生 UI 复用同一份字幕数据。固定 `setTimeout` 只能做无音轨占位,不算同步验收。
|
|
39
|
-
|
|
40
|
-
## 多人租约与公屏交付
|
|
41
|
-
|
|
42
|
-
- 在线角色的事实源使用按 `OsClient` 隔离的共享数据库/Redis,不能使用 API 节点静态字典;客户端心跳周期必须短于租约超时。
|
|
43
|
-
- 加入响应只向本人返回会话秘密;数据库保存 SHA-256,位置快照只公开昵称、受限坐标、朝向、动作与房间版本。
|
|
44
|
-
- 正常卸载/离开主动调用 leave;浏览器崩溃、断网或 `kill -9` 依靠服务端租约自然失效,并通过两个真实客户端测量消失时间。
|
|
45
|
-
- 公屏接口校验在线会话、内容长度、表情白名单、速率窗口和请求幂等;公开读取只返回有限时间窗和有限条数。浏览器验收用真实按键输入中文、字母、数字、标点、Shift 符号和输入法组合文本,并由第二个独立会话核对原文;直接调用 `fill()`/赋值只能验证服务端,不能证明键盘链路。
|
|
46
|
-
- 轮询是兼容基线;接入 WebSocket/SignalR 时仍保留共享租约为事实源,并用 V8 授权接口签发短期频道权限。
|
|
47
|
-
|
|
48
|
-
## WebGL 与 Windows 双端交付
|
|
49
|
-
|
|
50
|
-
- WebGL 与 Windows 必须来自同一个 Unity 工程、场景和语义版本;禁止用旧本地包搭配新网页版本。
|
|
51
|
-
- Windows 默认交付 x64 安装包,至少包含当前用户安装、开始菜单入口和卸载信息;没有明确需求时不申请管理员权限。
|
|
52
|
-
- 外壳应给出醒目的本地版下载入口,并同时显示版本、文件大小与 SHA-256;文件名包含语义版本,旧版本 URL 不覆盖。
|
|
53
|
-
- 安装包属于公开运行资产,不属于私有源码。同步 `directory` 前必须排除 `public/downloads` 等生成目录,再把完整安装包随 `dist` 走流式资产发布;禁止拆分 Base64 或伪装成源码规避单文件上限。
|
|
54
|
-
- 单文件大于 128 MiB 时,MCP 与 `@microi.net/cli` 共用协议 v3:默认 16 MiB 原始字节分片、逐片 HDFS 回读、整文件 SHA-256 和确定性会话。重启后必须先查状态并只补缺片;5 GiB 文件应规划为 320 片,不得重新从 0 开始。
|
|
55
|
-
- v3 不设置 Microi 产品级文件/目录字节上限;对象存储、磁盘、代理与协议技术边界仍需容量预检。发布期间在“系统引擎 → 超大文件上传记录”回读字节进度、心跳、失败原因和恢复建议,终态记录保留用于审计。
|
|
56
|
-
- 发布后从公网地址重新下载完整 EXE,比较字节数和 SHA-256;本地制包成功、MCP 返回文件 Id 或 HTTP HEAD 成功都不能替代完整回读。
|
|
57
|
-
- 本地验收至少覆盖静默安装、主程序存在、可启动和卸载入口;签名状态、SmartScreen 信誉和硬件帧率必须单独如实说明。
|
|
58
|
-
|
|
59
|
-
## 商城资源
|
|
60
|
-
|
|
61
|
-
游戏进度表使用应用前缀 `app_*`,不要占用平台保留的 `mci_*` 名称。技术幂等表可以不创建可见菜单;玩家运营表创建父菜单 + 子数据菜单,隐藏 UserId、RequestId、哈希等技术字段。
|
|
62
|
-
|
|
63
|
-
接口策略示例:
|
|
64
|
-
|
|
65
|
-
```json
|
|
66
|
-
{
|
|
67
|
-
"SchemaVersion": 1,
|
|
68
|
-
"ApiEngines": {
|
|
69
|
-
"app_game_bootstrap": { "Ownership": "Application", "UpgradePolicy": "Managed" },
|
|
70
|
-
"app_game_save": { "Ownership": "Application", "UpgradePolicy": "Managed" },
|
|
71
|
-
"app_game_after_save": { "Ownership": "Tenant", "UpgradePolicy": "CreateIfMissing" }
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
租户 Hook 使用新的稳定 Key;首次安装后归租户维护,同 Key 后续版本不能改回 `Managed`。
|
|
77
|
-
|
|
78
|
-
### 仅共享编译运行产物
|
|
79
|
-
|
|
80
|
-
消费者只获得运行应用、不安装业务资源时,商城发布显式传
|
|
81
|
-
`RuntimeAssetsOnly=true`。只接受 `ProtocolVersion=3`、`ApplicationType=Web`、
|
|
82
|
-
显式 `IncludeSource=false` 和已通过提交证明校验的 `SharedPublicRuntime`。
|
|
83
|
-
源码是否在本地或私有开发端保管,与消费者包不含源码分别验收;此模式本身不要求上传本地源码。
|
|
84
|
-
|
|
85
|
-
- 请求资源选择、历史 `SelectMenu/SelectTable/SelectApiEngine/SelectData` 和
|
|
86
|
-
`PreparedAssets.MenuContract` 均为空,非空时拒绝,不自动抹除;禁止混用 `DatabaseOnlyBuild`。
|
|
87
|
-
- 通过既有 `microi_run_engine.params` 向 `ai_app_publish_store` 传入开关,先
|
|
88
|
-
`InspectResourceSnapshot` 再 `Publish + ExpectedResourceSnapshotHash`,两次使用同一组冻结参数。
|
|
89
|
-
- 回读真实包的十一项资源数组、`SourceFiles/BuildAssets` 均为零,`SourceZip/BuildZip` 为空,
|
|
90
|
-
只保留共享运行交付。完整数组和兼容条件见 [应用商城 Skill](../../app-store/SKILL.md#仅共享编译运行产物)。
|
|
91
|
-
- 此模式的目标验收检查编译入口、宿主身份和实际服务契约;没有声明的表、菜单、接口及 Hook
|
|
92
|
-
不应在消费者租户生成。需要租户业务资源时使用普通资源包流程。
|
|
93
|
-
|
|
94
|
-
## 官方发布顺序
|
|
95
|
-
|
|
96
|
-
只有当前 MCP 明确绑定官方 `https://api.itdos.com`、`OsClient=iTdos` 且用户已授权写入时才执行:
|
|
97
|
-
|
|
98
|
-
1. `microi_list_applications` 按精确 AppKey/中文名查重。
|
|
99
|
-
2. 读取远端应用上下文、源码版本、运行版本、行版本/围栏与路由快照。
|
|
100
|
-
3. 本地完成类型检查、测试、真实 Unity 构建和 dist 完整性校验。
|
|
101
|
-
4. 先同步私有源码;生成的 Unity、安装包与构建证据目录不得混入源码清单。任何期望版本不一致都停止重基线。
|
|
102
|
-
5. 发布不可变 Web 运行版本,回读入口、文件数、哈希、状态与公开 URL。
|
|
103
|
-
- 官网、二维码、分享与商城“立即体验”必须指向不带版本号的固定当前入口,且游戏加载完成后地址栏仍保持该入口;不能把 `SharedPublicRuntime.EntryUrl`、`/releases/{Version}/requests/...` 或 `/versions/{Version}/` 当作当前体验地址,也不能用 30x、`meta refresh`、`location.replace` 伪装稳定入口。
|
|
104
|
-
- 不可变版本 URL 只写入历史版本记录、回滚和审计。固定入口可以使用同源全屏加载壳承载当前不可变产物,并必须透传 `autoplay`、`fullscreen` 与 `gamepad` 权限。
|
|
105
|
-
6. 若同时交付 Windows,从稳定公网地址下载完整安装包并核对大小、SHA-256 和版本;在线入口还要加载真实 WASM/Data。
|
|
106
|
-
7. 调用官方 `ai_app_publish_store` 生成并发布精确版本的应用商城包。超时属于结果不确定,必须回读包正文和 ZIP 后才能决定是否重试。
|
|
107
|
-
8. 回读 `sys_microistore` 的 AppKey、版本、状态、预览图、包摘要与资源策略,断言 `AppVersion == PackageInfo.Version == PreparedAssets.PackageVersion`。
|
|
108
|
-
9. 在官网 `/apps.html` 和 `/app-detail.html?app=<appKey>` 做公开页面回读。
|
|
109
|
-
10. 在一个非官方测试租户安装,回读表、菜单、接口和 Hook 所有权;再验证升级不覆盖租户 Hook。
|
|
110
|
-
11. 多人应用用两个独立浏览器会话互相验证昵称、位置、公屏;强制关闭一端,确认超过约定租约后另一端不再看到该角色。
|
|
111
|
-
|
|
112
|
-
源码同步、运行发布、商城发布、官网可见、目标租户安装是五项独立事实。任一步只有受理 ID 或 `doing` 状态,都不能报告最终成功。
|
|
113
|
-
|
|
114
|
-
## 版本与回滚
|
|
115
|
-
|
|
116
|
-
- 运行产物不可变;相同版本不可覆盖为不同哈希。
|
|
117
|
-
- 商城版本必须精确对应已验证运行版本与 Manifest。
|
|
118
|
-
- 升级遵循先扩展、后迁移、再收缩;新旧运行版本短暂并存时协议向前/向后兼容。
|
|
119
|
-
- 回滚恢复上一不可变运行版本;数据库变更需要显式兼容/补偿方案,不能用文件回滚伪装数据回滚。
|
|
1
|
+
# Unity AI 应用与商城交付
|
|
2
|
+
|
|
3
|
+
## 唯一源码
|
|
4
|
+
|
|
5
|
+
官方 AI 应用源码放在当前官方连接对应的:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
Microi-V8-Engine/<connection>/<product>/AI应用/<appKey>/
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
同一应用的 Vue 外壳、Unity 构建接入、V8 源码、Manifest、资源策略、测试和发布合约都从这里生成。Unity 工程可以保留服务端镜像,但必须由唯一源码生成并做一致性检查。
|
|
12
|
+
|
|
13
|
+
最小文件:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
.microi-micro-app.json
|
|
17
|
+
app.json
|
|
18
|
+
package.json
|
|
19
|
+
microi.routes.json
|
|
20
|
+
package-contract.json
|
|
21
|
+
resource-policies.json
|
|
22
|
+
system.manifest.json
|
|
23
|
+
src/
|
|
24
|
+
public/
|
|
25
|
+
server/engines/
|
|
26
|
+
scripts/
|
|
27
|
+
tests/
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Web 外壳
|
|
31
|
+
|
|
32
|
+
- Vue 3 + Vite + TypeScript。
|
|
33
|
+
- 复用工作区标准 `microi.v8.js` 与 `microi-ai-app-auth.js`,不要复制改造出第二套认证协议。
|
|
34
|
+
- 匿名模式可以承载公开多人玩法,但必须使用服务端签发、只存哈希、可过期的会话秘密;个人持久化接口仍要求 DiyToken。
|
|
35
|
+
- `ApplicationType=Web`,独立入口为 `index.html`。
|
|
36
|
+
- 构建状态明确区分 `available` 与 `publishable`;无真实 Unity WASM/Data 时禁止正式发布。
|
|
37
|
+
- WebGL 公屏优先使用可访问的 DOM 输入控件,并在 Unity Player 将 `WebGLInput.captureAllKeyboardInput` 设为 `false`;输入区同时隔离键盘、`beforeinput`、组合输入与指针事件。Unity 6 若未向 Player 编译响应文件引用 `UnityEngine.WebGLModule`,可用 `link.xml` 保留类型后反射设置,并必须以真实键盘输入回归。Windows 可使用原生 UI/UIToolkit。不要在外壳和 Unity 中重复绘制同一组操作提示。
|
|
38
|
+
- 语音字幕由真实播放器时间轴逐 cue 驱动,中英文分行放在底部安全区;WebGL DOM 与 Windows 原生 UI 复用同一份字幕数据。固定 `setTimeout` 只能做无音轨占位,不算同步验收。
|
|
39
|
+
|
|
40
|
+
## 多人租约与公屏交付
|
|
41
|
+
|
|
42
|
+
- 在线角色的事实源使用按 `OsClient` 隔离的共享数据库/Redis,不能使用 API 节点静态字典;客户端心跳周期必须短于租约超时。
|
|
43
|
+
- 加入响应只向本人返回会话秘密;数据库保存 SHA-256,位置快照只公开昵称、受限坐标、朝向、动作与房间版本。
|
|
44
|
+
- 正常卸载/离开主动调用 leave;浏览器崩溃、断网或 `kill -9` 依靠服务端租约自然失效,并通过两个真实客户端测量消失时间。
|
|
45
|
+
- 公屏接口校验在线会话、内容长度、表情白名单、速率窗口和请求幂等;公开读取只返回有限时间窗和有限条数。浏览器验收用真实按键输入中文、字母、数字、标点、Shift 符号和输入法组合文本,并由第二个独立会话核对原文;直接调用 `fill()`/赋值只能验证服务端,不能证明键盘链路。
|
|
46
|
+
- 轮询是兼容基线;接入 WebSocket/SignalR 时仍保留共享租约为事实源,并用 V8 授权接口签发短期频道权限。
|
|
47
|
+
|
|
48
|
+
## WebGL 与 Windows 双端交付
|
|
49
|
+
|
|
50
|
+
- WebGL 与 Windows 必须来自同一个 Unity 工程、场景和语义版本;禁止用旧本地包搭配新网页版本。
|
|
51
|
+
- Windows 默认交付 x64 安装包,至少包含当前用户安装、开始菜单入口和卸载信息;没有明确需求时不申请管理员权限。
|
|
52
|
+
- 外壳应给出醒目的本地版下载入口,并同时显示版本、文件大小与 SHA-256;文件名包含语义版本,旧版本 URL 不覆盖。
|
|
53
|
+
- 安装包属于公开运行资产,不属于私有源码。同步 `directory` 前必须排除 `public/downloads` 等生成目录,再把完整安装包随 `dist` 走流式资产发布;禁止拆分 Base64 或伪装成源码规避单文件上限。
|
|
54
|
+
- 单文件大于 128 MiB 时,MCP 与 `@microi.net/cli` 共用协议 v3:默认 16 MiB 原始字节分片、逐片 HDFS 回读、整文件 SHA-256 和确定性会话。重启后必须先查状态并只补缺片;5 GiB 文件应规划为 320 片,不得重新从 0 开始。
|
|
55
|
+
- v3 不设置 Microi 产品级文件/目录字节上限;对象存储、磁盘、代理与协议技术边界仍需容量预检。发布期间在“系统引擎 → 超大文件上传记录”回读字节进度、心跳、失败原因和恢复建议,终态记录保留用于审计。
|
|
56
|
+
- 发布后从公网地址重新下载完整 EXE,比较字节数和 SHA-256;本地制包成功、MCP 返回文件 Id 或 HTTP HEAD 成功都不能替代完整回读。
|
|
57
|
+
- 本地验收至少覆盖静默安装、主程序存在、可启动和卸载入口;签名状态、SmartScreen 信誉和硬件帧率必须单独如实说明。
|
|
58
|
+
|
|
59
|
+
## 商城资源
|
|
60
|
+
|
|
61
|
+
游戏进度表使用应用前缀 `app_*`,不要占用平台保留的 `mci_*` 名称。技术幂等表可以不创建可见菜单;玩家运营表创建父菜单 + 子数据菜单,隐藏 UserId、RequestId、哈希等技术字段。
|
|
62
|
+
|
|
63
|
+
接口策略示例:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"SchemaVersion": 1,
|
|
68
|
+
"ApiEngines": {
|
|
69
|
+
"app_game_bootstrap": { "Ownership": "Application", "UpgradePolicy": "Managed" },
|
|
70
|
+
"app_game_save": { "Ownership": "Application", "UpgradePolicy": "Managed" },
|
|
71
|
+
"app_game_after_save": { "Ownership": "Tenant", "UpgradePolicy": "CreateIfMissing" }
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
租户 Hook 使用新的稳定 Key;首次安装后归租户维护,同 Key 后续版本不能改回 `Managed`。
|
|
77
|
+
|
|
78
|
+
### 仅共享编译运行产物
|
|
79
|
+
|
|
80
|
+
消费者只获得运行应用、不安装业务资源时,商城发布显式传
|
|
81
|
+
`RuntimeAssetsOnly=true`。只接受 `ProtocolVersion=3`、`ApplicationType=Web`、
|
|
82
|
+
显式 `IncludeSource=false` 和已通过提交证明校验的 `SharedPublicRuntime`。
|
|
83
|
+
源码是否在本地或私有开发端保管,与消费者包不含源码分别验收;此模式本身不要求上传本地源码。
|
|
84
|
+
|
|
85
|
+
- 请求资源选择、历史 `SelectMenu/SelectTable/SelectApiEngine/SelectData` 和
|
|
86
|
+
`PreparedAssets.MenuContract` 均为空,非空时拒绝,不自动抹除;禁止混用 `DatabaseOnlyBuild`。
|
|
87
|
+
- 通过既有 `microi_run_engine.params` 向 `ai_app_publish_store` 传入开关,先
|
|
88
|
+
`InspectResourceSnapshot` 再 `Publish + ExpectedResourceSnapshotHash`,两次使用同一组冻结参数。
|
|
89
|
+
- 回读真实包的十一项资源数组、`SourceFiles/BuildAssets` 均为零,`SourceZip/BuildZip` 为空,
|
|
90
|
+
只保留共享运行交付。完整数组和兼容条件见 [应用商城 Skill](../../app-store/SKILL.md#仅共享编译运行产物)。
|
|
91
|
+
- 此模式的目标验收检查编译入口、宿主身份和实际服务契约;没有声明的表、菜单、接口及 Hook
|
|
92
|
+
不应在消费者租户生成。需要租户业务资源时使用普通资源包流程。
|
|
93
|
+
|
|
94
|
+
## 官方发布顺序
|
|
95
|
+
|
|
96
|
+
只有当前 MCP 明确绑定官方 `https://api.itdos.com`、`OsClient=iTdos` 且用户已授权写入时才执行:
|
|
97
|
+
|
|
98
|
+
1. `microi_list_applications` 按精确 AppKey/中文名查重。
|
|
99
|
+
2. 读取远端应用上下文、源码版本、运行版本、行版本/围栏与路由快照。
|
|
100
|
+
3. 本地完成类型检查、测试、真实 Unity 构建和 dist 完整性校验。
|
|
101
|
+
4. 先同步私有源码;生成的 Unity、安装包与构建证据目录不得混入源码清单。任何期望版本不一致都停止重基线。
|
|
102
|
+
5. 发布不可变 Web 运行版本,回读入口、文件数、哈希、状态与公开 URL。
|
|
103
|
+
- 官网、二维码、分享与商城“立即体验”必须指向不带版本号的固定当前入口,且游戏加载完成后地址栏仍保持该入口;不能把 `SharedPublicRuntime.EntryUrl`、`/releases/{Version}/requests/...` 或 `/versions/{Version}/` 当作当前体验地址,也不能用 30x、`meta refresh`、`location.replace` 伪装稳定入口。
|
|
104
|
+
- 不可变版本 URL 只写入历史版本记录、回滚和审计。固定入口可以使用同源全屏加载壳承载当前不可变产物,并必须透传 `autoplay`、`fullscreen` 与 `gamepad` 权限。
|
|
105
|
+
6. 若同时交付 Windows,从稳定公网地址下载完整安装包并核对大小、SHA-256 和版本;在线入口还要加载真实 WASM/Data。
|
|
106
|
+
7. 调用官方 `ai_app_publish_store` 生成并发布精确版本的应用商城包。超时属于结果不确定,必须回读包正文和 ZIP 后才能决定是否重试。
|
|
107
|
+
8. 回读 `sys_microistore` 的 AppKey、版本、状态、预览图、包摘要与资源策略,断言 `AppVersion == PackageInfo.Version == PreparedAssets.PackageVersion`。
|
|
108
|
+
9. 在官网 `/apps.html` 和 `/app-detail.html?app=<appKey>` 做公开页面回读。
|
|
109
|
+
10. 在一个非官方测试租户安装,回读表、菜单、接口和 Hook 所有权;再验证升级不覆盖租户 Hook。
|
|
110
|
+
11. 多人应用用两个独立浏览器会话互相验证昵称、位置、公屏;强制关闭一端,确认超过约定租约后另一端不再看到该角色。
|
|
111
|
+
|
|
112
|
+
源码同步、运行发布、商城发布、官网可见、目标租户安装是五项独立事实。任一步只有受理 ID 或 `doing` 状态,都不能报告最终成功。
|
|
113
|
+
|
|
114
|
+
## 版本与回滚
|
|
115
|
+
|
|
116
|
+
- 运行产物不可变;相同版本不可覆盖为不同哈希。
|
|
117
|
+
- 商城版本必须精确对应已验证运行版本与 Manifest。
|
|
118
|
+
- 升级遵循先扩展、后迁移、再收缩;新旧运行版本短暂并存时协议向前/向后兼容。
|
|
119
|
+
- 回滚恢复上一不可变运行版本;数据库变更需要显式兼容/补偿方案,不能用文件回滚伪装数据回滚。
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
# Microi.Unity SDK API
|
|
2
|
-
|
|
3
|
-
## 包边界
|
|
4
|
-
|
|
5
|
-
`Microi.Unity` 是 Unity Package Manager 包,不是普通 .NET 类库。Runtime 代码兼容项目选定的 Unity LTS 和 C# 语言级别;Editor 代码使用独立 asmdef,不能被播放器编译。
|
|
6
|
-
|
|
7
|
-
## Editor Toolbox 菜单与边界
|
|
8
|
-
|
|
9
|
-
| 菜单 | 能力 | 可恢复保证 |
|
|
10
|
-
|---|---|---|
|
|
11
|
-
| `Camera Points...` | 按前缀与完整层级路径导入导出 Transform/Camera | 导入注册 Unity Undo |
|
|
12
|
-
| `Mesh Combine...` | 对选中场景根节点按材质合并 Mesh | 精确保存源 Renderer;Restore 或 Undo;生成 Mesh 资产保留 |
|
|
13
|
-
| `Texture Optimization...` | 对 Project 窗口选中目录分析和修改 importer | 修改前写 `ProjectSettings/MicroiUnityBackups` JSON,可恢复 |
|
|
14
|
-
| `Analyze Active Scene` | Mesh、顶点、三角面、材质、Camera、Light 统计 | 只读,不把结构统计换算成虚假 FPS |
|
|
15
|
-
| `Analyze Camera Depth Precision` | near/far 深度比诊断 | 只读 |
|
|
16
|
-
| `WebGL Quality and Depth...` | Balanced/High Definition 画质和选中 Camera 深度 | 画质先备份 JSON;Camera 使用 Undo |
|
|
17
|
-
| `Remove Camera Components...` | 清理选中层级里的 `CameraPoint_` Camera | 仅选中范围,支持 Undo |
|
|
18
|
-
|
|
19
|
-
禁止把工具改回全场景、全工程无范围扫描。凡是修改 AssetImporter、质量设置或生成 Mesh 的新功能,都必须先定义备份、恢复和失败中断语义。
|
|
20
|
-
|
|
21
|
-
```text
|
|
22
|
-
Runtime/Api/MicroiApiClient.cs
|
|
23
|
-
Runtime/Api/MicroiApiModels.cs
|
|
24
|
-
Runtime/WebGL/MicroiWebGLBridge.cs
|
|
25
|
-
Runtime/WebGL/Plugins/WebGL/MicroiWebGLBridge.jslib
|
|
26
|
-
Editor/MicroiWebGLBuildUtility.cs
|
|
27
|
-
Samples~/V8ApiQuickStart/
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## MicroiApiClient
|
|
31
|
-
|
|
32
|
-
场景保持一个名称稳定的 `MicroiApiClient` GameObject。主要方法:
|
|
33
|
-
|
|
34
|
-
- `Configure(baseUrl, osClient, did)`:规范化 API 地址和租户上下文。
|
|
35
|
-
- `SetAuthorization(tokenOrBearerValue)`:去掉 Bearer 前缀,仅保存在内存。
|
|
36
|
-
- `ClearAuthorization()`:登出或宿主切换时清空会话。
|
|
37
|
-
- `ApplyMicroiHostContext(json)`:供 WebGL `SendMessage` 调用。
|
|
38
|
-
- `Post<TRequest,TData>()`:类型化 DosResult 请求。
|
|
39
|
-
- `PostJson()`:发送原始 JSON;ApiEngineKey 只允许字母、数字、点、下划线与短横线。
|
|
40
|
-
|
|
41
|
-
事件:
|
|
42
|
-
|
|
43
|
-
- `HostContextApplied`:宿主上下文完成更新。
|
|
44
|
-
- `AuthorizationRotated`:响应头返回新 DiyToken。
|
|
45
|
-
|
|
46
|
-
不要把 Token 暴露为可序列化字段或 Unity Inspector 字段。日志只允许记录状态,不输出请求头、Token 或完整敏感响应。
|
|
47
|
-
|
|
48
|
-
## DosResult 模型
|
|
49
|
-
|
|
50
|
-
成功判断同时考虑 HTTP 状态和 `Code=1`。`Code=1001/1002` 应交给宿主认证层处理,不能由 Unity 自行伪造新 Token。
|
|
51
|
-
|
|
52
|
-
```csharp
|
|
53
|
-
StartCoroutine(client.Post<SaveRequest, SaveData>(
|
|
54
|
-
"app_unity_taoyuan_save",
|
|
55
|
-
request,
|
|
56
|
-
result => Apply(result.Data),
|
|
57
|
-
failure => ShowRetry(failure.Msg)));
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
`JsonUtility` 不适合任意字典和顶层数组;复杂协议应增加稳定 DTO,或在明确兼容的 JSON 库上建立独立适配层。
|
|
61
|
-
|
|
62
|
-
## WebGL Bridge
|
|
63
|
-
|
|
64
|
-
C# 调用:
|
|
65
|
-
|
|
66
|
-
- `MicroiWebGLBridge.NotifyReady()`
|
|
67
|
-
- `MicroiWebGLBridge.NotifyAuthorizationRotated(token, requestToken)`
|
|
68
|
-
- `MicroiWebGLBridge.Emit(eventName, jsonPayload)`
|
|
69
|
-
|
|
70
|
-
`.jslib` 只转换字符串并调用页面全局函数,不缓存会话。非 WebGL/Editor 下的业务事件可以写脱敏调试日志,便于 Play 验收。
|
|
71
|
-
|
|
72
|
-
## Editor 构建工具
|
|
73
|
-
|
|
74
|
-
公共构建工具负责:
|
|
75
|
-
|
|
76
|
-
- 确认 WebGL BuildTargetSupport 已安装;
|
|
77
|
-
- 选择场景与模板;
|
|
78
|
-
- 固定 WebGL 2/WASM 和兼容压缩策略;
|
|
79
|
-
- 建立输出目录并生成可追溯构建结果;
|
|
80
|
-
- 失败时返回非零进程码,不生成“成功”哨兵。
|
|
81
|
-
|
|
82
|
-
特定游戏的场景创建、PlayerSettings 和输出路径配置放项目 Editor 脚本,调用公共工具,不硬编码进 UPM。
|
|
1
|
+
# Microi.Unity SDK API
|
|
2
|
+
|
|
3
|
+
## 包边界
|
|
4
|
+
|
|
5
|
+
`Microi.Unity` 是 Unity Package Manager 包,不是普通 .NET 类库。Runtime 代码兼容项目选定的 Unity LTS 和 C# 语言级别;Editor 代码使用独立 asmdef,不能被播放器编译。
|
|
6
|
+
|
|
7
|
+
## Editor Toolbox 菜单与边界
|
|
8
|
+
|
|
9
|
+
| 菜单 | 能力 | 可恢复保证 |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `Camera Points...` | 按前缀与完整层级路径导入导出 Transform/Camera | 导入注册 Unity Undo |
|
|
12
|
+
| `Mesh Combine...` | 对选中场景根节点按材质合并 Mesh | 精确保存源 Renderer;Restore 或 Undo;生成 Mesh 资产保留 |
|
|
13
|
+
| `Texture Optimization...` | 对 Project 窗口选中目录分析和修改 importer | 修改前写 `ProjectSettings/MicroiUnityBackups` JSON,可恢复 |
|
|
14
|
+
| `Analyze Active Scene` | Mesh、顶点、三角面、材质、Camera、Light 统计 | 只读,不把结构统计换算成虚假 FPS |
|
|
15
|
+
| `Analyze Camera Depth Precision` | near/far 深度比诊断 | 只读 |
|
|
16
|
+
| `WebGL Quality and Depth...` | Balanced/High Definition 画质和选中 Camera 深度 | 画质先备份 JSON;Camera 使用 Undo |
|
|
17
|
+
| `Remove Camera Components...` | 清理选中层级里的 `CameraPoint_` Camera | 仅选中范围,支持 Undo |
|
|
18
|
+
|
|
19
|
+
禁止把工具改回全场景、全工程无范围扫描。凡是修改 AssetImporter、质量设置或生成 Mesh 的新功能,都必须先定义备份、恢复和失败中断语义。
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
Runtime/Api/MicroiApiClient.cs
|
|
23
|
+
Runtime/Api/MicroiApiModels.cs
|
|
24
|
+
Runtime/WebGL/MicroiWebGLBridge.cs
|
|
25
|
+
Runtime/WebGL/Plugins/WebGL/MicroiWebGLBridge.jslib
|
|
26
|
+
Editor/MicroiWebGLBuildUtility.cs
|
|
27
|
+
Samples~/V8ApiQuickStart/
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## MicroiApiClient
|
|
31
|
+
|
|
32
|
+
场景保持一个名称稳定的 `MicroiApiClient` GameObject。主要方法:
|
|
33
|
+
|
|
34
|
+
- `Configure(baseUrl, osClient, did)`:规范化 API 地址和租户上下文。
|
|
35
|
+
- `SetAuthorization(tokenOrBearerValue)`:去掉 Bearer 前缀,仅保存在内存。
|
|
36
|
+
- `ClearAuthorization()`:登出或宿主切换时清空会话。
|
|
37
|
+
- `ApplyMicroiHostContext(json)`:供 WebGL `SendMessage` 调用。
|
|
38
|
+
- `Post<TRequest,TData>()`:类型化 DosResult 请求。
|
|
39
|
+
- `PostJson()`:发送原始 JSON;ApiEngineKey 只允许字母、数字、点、下划线与短横线。
|
|
40
|
+
|
|
41
|
+
事件:
|
|
42
|
+
|
|
43
|
+
- `HostContextApplied`:宿主上下文完成更新。
|
|
44
|
+
- `AuthorizationRotated`:响应头返回新 DiyToken。
|
|
45
|
+
|
|
46
|
+
不要把 Token 暴露为可序列化字段或 Unity Inspector 字段。日志只允许记录状态,不输出请求头、Token 或完整敏感响应。
|
|
47
|
+
|
|
48
|
+
## DosResult 模型
|
|
49
|
+
|
|
50
|
+
成功判断同时考虑 HTTP 状态和 `Code=1`。`Code=1001/1002` 应交给宿主认证层处理,不能由 Unity 自行伪造新 Token。
|
|
51
|
+
|
|
52
|
+
```csharp
|
|
53
|
+
StartCoroutine(client.Post<SaveRequest, SaveData>(
|
|
54
|
+
"app_unity_taoyuan_save",
|
|
55
|
+
request,
|
|
56
|
+
result => Apply(result.Data),
|
|
57
|
+
failure => ShowRetry(failure.Msg)));
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
`JsonUtility` 不适合任意字典和顶层数组;复杂协议应增加稳定 DTO,或在明确兼容的 JSON 库上建立独立适配层。
|
|
61
|
+
|
|
62
|
+
## WebGL Bridge
|
|
63
|
+
|
|
64
|
+
C# 调用:
|
|
65
|
+
|
|
66
|
+
- `MicroiWebGLBridge.NotifyReady()`
|
|
67
|
+
- `MicroiWebGLBridge.NotifyAuthorizationRotated(token, requestToken)`
|
|
68
|
+
- `MicroiWebGLBridge.Emit(eventName, jsonPayload)`
|
|
69
|
+
|
|
70
|
+
`.jslib` 只转换字符串并调用页面全局函数,不缓存会话。非 WebGL/Editor 下的业务事件可以写脱敏调试日志,便于 Play 验收。
|
|
71
|
+
|
|
72
|
+
## Editor 构建工具
|
|
73
|
+
|
|
74
|
+
公共构建工具负责:
|
|
75
|
+
|
|
76
|
+
- 确认 WebGL BuildTargetSupport 已安装;
|
|
77
|
+
- 选择场景与模板;
|
|
78
|
+
- 固定 WebGL 2/WASM 和兼容压缩策略;
|
|
79
|
+
- 建立输出目录并生成可追溯构建结果;
|
|
80
|
+
- 失败时返回非零进程码,不生成“成功”哨兵。
|
|
81
|
+
|
|
82
|
+
特定游戏的场景创建、PlayerSettings 和输出路径配置放项目 Editor 脚本,调用公共工具,不硬编码进 UPM。
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
# 既有 Unity 工具箱提取
|
|
2
|
-
|
|
3
|
-
## 先建立清单
|
|
4
|
-
|
|
5
|
-
按目录和程序集记录:
|
|
6
|
-
|
|
7
|
-
- Runtime 通用脚本;
|
|
8
|
-
- Editor 菜单、导入器和构建工具;
|
|
9
|
-
- WebGL `.jslib`、模板和 JavaScript;
|
|
10
|
-
- 相机、路径、触发区、设备协议与客户业务脚本;
|
|
11
|
-
- Prefab、模型、动作、材质、贴图、字体、音频;
|
|
12
|
-
- 第三方 Package 与其许可证。
|
|
13
|
-
|
|
14
|
-
同时记录 Unity 版本、渲染管线、API Compatibility Level、Scripting Backend、目标平台和程序集依赖图。
|
|
15
|
-
|
|
16
|
-
## 分类规则
|
|
17
|
-
|
|
18
|
-
| 类型 | 去向 |
|
|
19
|
-
|---|---|
|
|
20
|
-
| 与业务无关的 API 客户端、宿主桥、构建基础能力 | `Microi.Unity/Runtime` 或 `Editor` |
|
|
21
|
-
| 可展示的最小使用方式 | `Microi.Unity/Samples~` |
|
|
22
|
-
| 场景、客户模型、设备字段、项目配置 | 原项目或独立业务项目 |
|
|
23
|
-
| 来源不明或限制再分发的素材 | 不进入公共包;替换或取得授权 |
|
|
24
|
-
| 只为旧项目兼容的适配代码 | 原项目 Adapter,不污染公共 API |
|
|
25
|
-
|
|
26
|
-
## 安全迁移顺序
|
|
27
|
-
|
|
28
|
-
1. 只读盘点并记录基线;不先移动文件。
|
|
29
|
-
2. 复制候选公共代码到 UPM,移除业务命名和硬编码配置。
|
|
30
|
-
3. 建 asmdef,限制 Runtime/Editor 引用方向。
|
|
31
|
-
4. 在独立 Sample 编译并运行最小场景。
|
|
32
|
-
5. 让旧项目通过 `Packages/manifest.json` 引用新 UPM。
|
|
33
|
-
6. 替换旧项目调用并执行 Editor、目标平台和 WebGL 回归。
|
|
34
|
-
7. 比较导出接口、序列化字段、Prefab GUID 和运行行为。
|
|
35
|
-
8. 只有用户明确要求且回归通过,才考虑删除旧副本;否则保留来源并标注镜像关系。
|
|
36
|
-
|
|
37
|
-
## 兼容性注意
|
|
38
|
-
|
|
39
|
-
- 移动脚本可能改变 `.meta` GUID,导致 Prefab/Scene 引用丢失;公共提取优先新 API + Adapter,不直接搬走序列化脚本。
|
|
40
|
-
- Editor-only 命名空间必须放 Editor asmdef 或 `#if UNITY_EDITOR`。
|
|
41
|
-
- WebGL 不支持所有线程、Socket、反射和文件系统用法;公共 API 要明确平台条件。
|
|
42
|
-
- Unity 内置 JSON 对字典、多态和顶层数组有限制,不能在提取时默默改变协议。
|
|
43
|
-
- 不把客户服务器地址、OsClient、Token、设备密钥或私有证书写入 Sample。
|
|
44
|
-
|
|
45
|
-
## 提取验收
|
|
46
|
-
|
|
47
|
-
- UPM `package.json` 可解析,Runtime/Editor asmdef 引用无环。
|
|
48
|
-
- Sample 编译与 Play 通过。
|
|
49
|
-
- 原项目改用 UPM 后功能等价。
|
|
50
|
-
- WebGL 插件实际链接,无 `EntryPointNotFound`。
|
|
51
|
-
- 公共包扫描不含客户品牌、秘密、本机路径与未授权二进制素材。
|
|
52
|
-
- README 说明支持版本、安装、最小示例、平台限制和升级策略。
|
|
53
|
-
|
|
54
|
-
## 当前官方包已提取能力
|
|
55
|
-
|
|
56
|
-
`Microi.Unity` 已从既有数字孪生项目重构以下公共能力:
|
|
57
|
-
|
|
58
|
-
- WebGL 宿主事件桥、V8/DiyToken 客户端和构建入口;
|
|
59
|
-
- 相机点按层级路径导入导出,导入支持 Undo;
|
|
60
|
-
- 选中根节点范围内的 Mesh 合并,使用精确 Renderer 引用恢复;
|
|
61
|
-
- 选中资源目录范围内的贴图优化,执行前保存完整 importer JSON;
|
|
62
|
-
- 场景结构统计、Camera 深度精度诊断和选中 Camera 的 Undo 调整;
|
|
63
|
-
- Balanced / High Definition WebGL 质量预设和 JSON 恢复;
|
|
64
|
-
- 选中层级内多余 `CameraPoint_` Camera 组件的安全清理。
|
|
65
|
-
|
|
66
|
-
旧项目的镜头路径、位置触发区、设备字段和业务 GameManager 仍属于项目 Adapter,不进入公共包。不要把这类保留项误报为“遗漏”;只有出现两个以上无业务字段的复用项目时,再抽取新的 Runtime 模块。
|
|
1
|
+
# 既有 Unity 工具箱提取
|
|
2
|
+
|
|
3
|
+
## 先建立清单
|
|
4
|
+
|
|
5
|
+
按目录和程序集记录:
|
|
6
|
+
|
|
7
|
+
- Runtime 通用脚本;
|
|
8
|
+
- Editor 菜单、导入器和构建工具;
|
|
9
|
+
- WebGL `.jslib`、模板和 JavaScript;
|
|
10
|
+
- 相机、路径、触发区、设备协议与客户业务脚本;
|
|
11
|
+
- Prefab、模型、动作、材质、贴图、字体、音频;
|
|
12
|
+
- 第三方 Package 与其许可证。
|
|
13
|
+
|
|
14
|
+
同时记录 Unity 版本、渲染管线、API Compatibility Level、Scripting Backend、目标平台和程序集依赖图。
|
|
15
|
+
|
|
16
|
+
## 分类规则
|
|
17
|
+
|
|
18
|
+
| 类型 | 去向 |
|
|
19
|
+
|---|---|
|
|
20
|
+
| 与业务无关的 API 客户端、宿主桥、构建基础能力 | `Microi.Unity/Runtime` 或 `Editor` |
|
|
21
|
+
| 可展示的最小使用方式 | `Microi.Unity/Samples~` |
|
|
22
|
+
| 场景、客户模型、设备字段、项目配置 | 原项目或独立业务项目 |
|
|
23
|
+
| 来源不明或限制再分发的素材 | 不进入公共包;替换或取得授权 |
|
|
24
|
+
| 只为旧项目兼容的适配代码 | 原项目 Adapter,不污染公共 API |
|
|
25
|
+
|
|
26
|
+
## 安全迁移顺序
|
|
27
|
+
|
|
28
|
+
1. 只读盘点并记录基线;不先移动文件。
|
|
29
|
+
2. 复制候选公共代码到 UPM,移除业务命名和硬编码配置。
|
|
30
|
+
3. 建 asmdef,限制 Runtime/Editor 引用方向。
|
|
31
|
+
4. 在独立 Sample 编译并运行最小场景。
|
|
32
|
+
5. 让旧项目通过 `Packages/manifest.json` 引用新 UPM。
|
|
33
|
+
6. 替换旧项目调用并执行 Editor、目标平台和 WebGL 回归。
|
|
34
|
+
7. 比较导出接口、序列化字段、Prefab GUID 和运行行为。
|
|
35
|
+
8. 只有用户明确要求且回归通过,才考虑删除旧副本;否则保留来源并标注镜像关系。
|
|
36
|
+
|
|
37
|
+
## 兼容性注意
|
|
38
|
+
|
|
39
|
+
- 移动脚本可能改变 `.meta` GUID,导致 Prefab/Scene 引用丢失;公共提取优先新 API + Adapter,不直接搬走序列化脚本。
|
|
40
|
+
- Editor-only 命名空间必须放 Editor asmdef 或 `#if UNITY_EDITOR`。
|
|
41
|
+
- WebGL 不支持所有线程、Socket、反射和文件系统用法;公共 API 要明确平台条件。
|
|
42
|
+
- Unity 内置 JSON 对字典、多态和顶层数组有限制,不能在提取时默默改变协议。
|
|
43
|
+
- 不把客户服务器地址、OsClient、Token、设备密钥或私有证书写入 Sample。
|
|
44
|
+
|
|
45
|
+
## 提取验收
|
|
46
|
+
|
|
47
|
+
- UPM `package.json` 可解析,Runtime/Editor asmdef 引用无环。
|
|
48
|
+
- Sample 编译与 Play 通过。
|
|
49
|
+
- 原项目改用 UPM 后功能等价。
|
|
50
|
+
- WebGL 插件实际链接,无 `EntryPointNotFound`。
|
|
51
|
+
- 公共包扫描不含客户品牌、秘密、本机路径与未授权二进制素材。
|
|
52
|
+
- README 说明支持版本、安装、最小示例、平台限制和升级策略。
|
|
53
|
+
|
|
54
|
+
## 当前官方包已提取能力
|
|
55
|
+
|
|
56
|
+
`Microi.Unity` 已从既有数字孪生项目重构以下公共能力:
|
|
57
|
+
|
|
58
|
+
- WebGL 宿主事件桥、V8/DiyToken 客户端和构建入口;
|
|
59
|
+
- 相机点按层级路径导入导出,导入支持 Undo;
|
|
60
|
+
- 选中根节点范围内的 Mesh 合并,使用精确 Renderer 引用恢复;
|
|
61
|
+
- 选中资源目录范围内的贴图优化,执行前保存完整 importer JSON;
|
|
62
|
+
- 场景结构统计、Camera 深度精度诊断和选中 Camera 的 Undo 调整;
|
|
63
|
+
- Balanced / High Definition WebGL 质量预设和 JSON 恢复;
|
|
64
|
+
- 选中层级内多余 `CameraPoint_` Camera 组件的安全清理。
|
|
65
|
+
|
|
66
|
+
旧项目的镜头路径、位置触发区、设备字段和业务 GameManager 仍属于项目 Adapter,不进入公共包。不要把这类保留项误报为“遗漏”;只有出现两个以上无业务字段的复用项目时,再抽取新的 Runtime 模块。
|