Skip to content

SYSTEM ENGINE · REAL-TIME 3D

让 Unity 场景,成为
可安装的吾码应用

Unity 负责实时 3D,Microi.Unity 负责浏览器桥接,V8 接口引擎负责身份、权限与数据。游戏、数字孪生、展厅,都沿用同一条交付链。

UPM SDKWebGL 2Windows x64多人同场实时公屏V8 API
晨雾桃园山谷中的原创古风女主
桃源云梦原创 Unity WebGL 样板
01Unity / WebGL

场景、角色、物理、镜头与输入

02Microi.Unity

UPM SDK、会话注入与宿主事件

03V8 接口引擎

权限、业务规则与可靠持久化

一套能力,三种交付

GAME

Web 3D 游戏

角色漫游、收集任务、排行榜与账号进度。

TWIN

数字孪生

设备状态、告警、工单与实时场景联动。

SHOWROOM

沉浸式展厅

园区、产线、文旅与产品的在线全屏展示。

Microi 已有大屏 Unity 加载能力与项目级工具。现在补齐的是公共 UPM SDK、稳定的 V8 通讯约定、可恢复的 Editor 工具箱、官方文档、Skill,以及可安装的完整 AI 应用样板。

架构结论
Microi.Unity 放在仓库根级

它依赖 UnityEngine、UnityWebRequest 与 WebGL `.jslib`,属于 Unity Package Manager 包。

不放进 Microi.Server

常规进度、设备状态和任务由 V8 编排;只有缺失的平台级可信原子能力才扩展服务端。

从项目工具,升级为安全工具箱

旧数字孪生项目里的工具很实用,但会按名称扫描全场景、批量修改全工程资源。公共 SDK 采用更严格的可恢复边界:先选范围、再预览,修改前留下 Undo 或 JSON 备份。

相机点

按完整层级路径导入导出;变换与 Camera 设置均支持 Undo。

Mesh 合并

只处理选中根节点,精确记录源 Renderer,不靠名称猜测恢复。

贴图优化

只处理选中资源目录,修改 importer 前生成完整 JSON 备份。

超清与性能

场景结构、深度精度与两档 WebGL 画质;真实 FPS 交给 Profiler 和浏览器验证。

入口统一位于 Microi → Unity → Toolbox。生成 Mesh 放入项目的 Assets/MicroiGenerated,备份放入 ProjectSettings/MicroiUnityBackups;镜头路径、设备字段和客户业务脚本仍留在原项目 Adapter,避免破坏 Prefab GUID。

数据如何流动

1吾码页面

读取当前 ApiBase、OsClient、DiyToken 与设备标识。

2WebGL 宿主

Unity 就绪后,用 SendMessage 把上下文注入内存。

3Microi.Unity

用 UnityWebRequest 调用稳定的接口引擎 Key。

4V8 + 数据库

验证身份与边界,以唯一请求号幂等保存。

会话只进内存

DiyToken 不进入 URL、场景、Prefab、日志或静态配置。宿主收到轮换 Token 时还会校验请求旧值,避免迟到响应覆盖新会话。

桃源云梦 · 官方 AI 应用

桃源云梦应用预览

MICROI AI APPLICATION · WEBGL + WINDOWS

走进云海桃园,寻回九枚桃花灵韵

v1.4 专业角色预览版支持操控古风女主行走、奔跑、跳跃;浏览器即开即玩,也可下载安装 Windows x64 本地版。每位访客拥有唯一随机昵称,同场角色与左下角公屏实时同步;登录后再由 V8 接口引擎恢复并保存个人进度。

  • 可追溯实时角色AI 设定图约束造型,CC0 基础网格二次创作;设定图与实机证据分开标注
  • 双端同版WebGL 在线全屏与 Windows 安装包统一使用 v1.4.0
  • 视觉状态透明当前是专业角色预览;正式原创云绮 AAA 高模仍在制作与实机近景验收中
  • 多人桃源随机昵称、2 秒心跳、10 秒掉线消失、头顶名牌与角色插值
  • 实时公屏左下角文字聊天、表情选择、输入隔离、限频与幂等
  • 完整商城包Web 产物、4 张表、9 个接口和 4 个运营菜单
  • 租户可扩展保存后 Hook 首次创建,官方升级永不覆盖

安装后会得到:

在线游戏

全屏 WebGL 外壳、海报预载、失败降级与退出释放。

Windows 本地版

当前用户安装、开始菜单快捷方式与卸载入口;下载页显示版本、体积和 SHA-256。

玩家数据

app_unity_taoyuan_player 保存当前快照。

幂等台账

app_unity_taoyuan_save_log 抵御重试与节点切换。

在线租约

app_unity_taoyuan_presence 保存随机昵称、位置与 10 秒到期时间。

公屏消息

app_unity_taoyuan_chat 保存经过会话校验、限频与幂等处理的文字和表情。

运营菜单

分别查看玩家进度、在线访客与公屏消息;会话秘密永不展示。

多人在线与公屏如何工作

1加入房间

V8 分配当前租户内唯一随机昵称,只把一次性会话秘密返回给本人。

2心跳续租

客户端每 2 秒提交受限位置与动作;数据库租约写为服务端当前时间加 10 秒。

3共享快照

其他客户端只读取未过期角色,显示相同模型、插值移动和头顶昵称。

4公屏同步

文字与表情经秘密哈希校验、80 字限制、十秒限频和请求幂等后广播。

掉线不是依赖单机定时器

每个 API 节点都只查询共享数据库中的未过期租约,因此负载均衡、节点重启或滚动发布不会让“幽灵角色”永久留在场景。页面正常退出会主动离场;异常掉线最迟约 10 秒从其他访客快照消失。

五分钟接入

1. 安装 UPM 包

在 Unity 项目的 Packages/manifest.json 添加:

json
{
  "dependencies": {
    "com.microi.unity": "file:../../../Microi.Unity"
  }
}
公共包只放可复用能力Runtime API · WebGL Bridge · Safe Toolbox · Editor Build · Samples

2. 调用接口引擎

csharp
StartCoroutine(client.PostJson(
    "app_unity_taoyuan_bootstrap",
    "{}",
    response => Debug.Log(response.IsSuccess ? "ready" : response.Msg)));

请求会自动携带:

http
POST /apiengine/app_unity_taoyuan_bootstrap
Content-Type: application/json
osclient: {OsClient}
apiengine: 1
authorization: Bearer {DiyToken}
did: {DeviceId}

3. 页面注入上下文

js
unityInstance.SendMessage('MicroiApiClient', 'ApplyMicroiHostContext', JSON.stringify({
  ApiBaseUrl: apiBase,
  OsClient: osClient,
  Authorization: currentDiyToken,
  Did: browserDeviceId
}))
onMicroiUnityReady()场景可接收上下文
onMicroiUnityAuthorizationRotated()安全同步轮换 Token
onMicroiUnityEvent()向宿主发送业务事件

页面不可见时应暂停场景;真正离开时调用 Quit()。只隐藏 Canvas 不会释放 WebGL、WASM 与 GPU 内存。

V8 服务端基线

身份只信 V8.CurrentUser

拒绝客户端传入 UserId 冒充其他玩家。

校验重新验证状态变化

坐标、数量、文本长度都由服务端裁决。

幂等RequestId + 唯一索引

多节点、重试、断线恢复只产生一次结果。

升级Manifest + ResourcePolicies

核心接口 Managed,租户 Hook CreateIfMissing。

  • 匿名多人接口使用服务端签发的 SessionId + SessionSecret;数据库只存 SHA-256,不把秘密、用户身份或内部字段放进公开快照。
  • 在线事实进入共享数据库或 Redis;2 秒心跳和 10 秒租约只是本样板参数,不能以进程内字典代替。
  • 公屏消息限制长度、表情白名单、单位时间发送数和稳定 RequestId;页面输入框必须阻止键盘事件继续驱动角色。
查看幂等保存核心片段
js
var user = V8.CurrentUser || {};
if (!user.Id) return { Code: 0, Msg: '未登录或 DiyToken 已失效。' };

var requestId = String(V8.Param.RequestId || '').trim();
if (!/^[A-Za-z0-9._:-]{16,80}$/.test(requestId)) {
  return { Code: 0, Msg: 'RequestId 格式不合法。' };
}

var replay = V8.FormEngine.GetFormData('app_unity_taoyuan_save_log', {
  _Where: [['RequestId', '=', requestId]]
});
if (replay && replay.Code === 1) {
  return { Code: 1, Data: { Replayed: true } };
}

// 继续校验坐标与进度,再写玩家快照和唯一幂等日志。

WebGL 与 Windows 双端构建

UNITY 2022.3 LTSMicroi → Taoyuan → Build WebGL

同一工程分别生成 WebGL 在线版和 Windows x64 本地版,再由安装器封装为可下载 EXE。

powershell
$unityExe = Join-Path $env:MICROI_UNITY_EDITOR_ROOT 'Unity.exe'
$projectPath = Join-Path $env:MICROI_REPOSITORY_ROOT 'AI-Project\microi\Unity'
& $unityExe `
  -batchmode -nographics -quit `
  -projectPath $projectPath `
  -executeMethod Microi.Taoyuan.Editor.TaoyuanWebGLBuild.Build
powershell
& $unityExe `
  -batchmode -nographics -quit `
  -projectPath $projectPath `
  -executeMethod Microi.Taoyuan.Editor.TaoyuanWebGLBuild.BuildWindows

MICROI_UNITY_EDITOR_ROOT 指向 Unity Editor 目录,MICROI_REPOSITORY_ROOT 指向吾码仓库根目录;示例不绑定开发者电脑的盘符。

程序化场景要单独检查 IL2CPP 裁剪

GameObject.CreatePrimitive、反射或字符串类型名不会完整出现在静态调用图中。先用 link.xml 精确保留动态类型;若浏览器仍出现 class IDclass has been stripped 或碰撞体缺失,程序化 WebGL 构建应关闭 PlayerSettings.stripEngineCode,再用包体变化与零错误控制台验收。模板同时启用 autoSyncPersistentDataPath,避免旧式文件系统同步警告。

超大 Unity 产物也能断点发布

Unity 的 Data、WASM 与 Windows 安装包经常超过普通表单上传范围。吾码 MCP 与 CLI 会自动使用应用资产协议 v3,文件字节不进入 Base64、JSON 或 V8 引擎内存。

16 MiB有界分片

5 GiB 文件自动规划为 320 片,内存占用不随文件整体增长。

RESUME断点续传

网络或进程重启后读取同一会话,只上传缺失且摘要不一致的分片。

SHA-256双重校验

逐片写后回读,完成时再核对 HDFS 中的整文件摘要。

AUDIT管理员可见

系统引擎 → 超大文件上传记录,显示进度、心跳、错误与恢复建议。

协议 v3 没有吾码产品级文件或目录字节上限;对象仍受分片协议、JavaScript 安全整数、对象存储、磁盘、反向代理和实际网络条件约束。成功后先保留带版本号的不可变地址,再切换稳定入口;公网下载完整文件并核对大小与 SHA-256 才算发布回读完成。

✓ 正确的 WASM / Data MIME✓ gzip / Brotli Content-Encoding✓ HTTP(S) 运行,不使用 file://✓ 桌面 64 位浏览器实测✓ Windows 安装、启动、卸载冒烟测试✓ 公网安装包 SHA-256 回读一致✓ 大资产断点续传与后台审计终态✓ 两个独立访客互见昵称、位置与公屏✓ 异常断开 10 秒后角色消失

Unity 2022.3 的官方 WebGL 支持以桌面浏览器为主。移动端需要单独做触控、内存、画质和弱网分档,不能用桌面构建通过代替。

验收不是一句“能运行”

01源码

UPM、C#、V8、Manifest 与安全扫描

02Editor

Play、移动、跳跃、碰撞与收集

03WebGL

IL2CPP、WASM 与完整静态产物

04浏览器

加载、全屏、焦点、退出与控制台

05真实租户

Token、用户隔离、重放和无权请求

06商城

公开列表、详情、安装、升级与回读

每一层都是独立证据。源码检查不能描述成线上成功,应用受理编号也不能替代公开页面与非官方租户安装回读。

视觉验收必须看实机

AI 角色设定图用于约束脸型、发式、衣料与色彩,不是运行时截图。只有 Unity Player/WebGL 的近景截图、帧率、模型拓扑、材质通道和目标设备实测,才能证明实际画质;文档与商城页不得把设定图标成“AAA 实机”。

继续深入

MIT License.