關聯文檔:【方案分享】Flutter +Unity 跨平臺三維渲染架構設計全解:插件封裝、通信機制與熱更新機制—— 支持 Android/iOS/Web 的 3D 內容嵌入與遠程資源管理,助力 XR 項目落地
—— 支持 Android/iOS/Web 的 3D 內容嵌入與遠程資源管理,助力 XR 項目企業級開發落地
適用場景:三維內容(模型/動畫/場景)需要跨平臺(Android/iOS/Web)展示,UI 用 Flutter 實現,Unity 作為底層 3D 渲染引擎,支持熱更新、場景管理與統一接口通信。
Unity 三端封裝方案:Android / iOS / Web
1. 多端封裝的核心目標
在跨平臺項目中,我們希望 Unity 作為渲染引擎統一三端(Android/iOS/Web)的三維內容展示,并通過 Flutter UI 層進行控制與交互。因此,Unity 的項目需要封裝為三端可調用的渲染模塊,以便被 Flutter 插件橋接。
目標:
- 將 Unity 工程分別封裝為 Android AAR、iOS Framework、WebGL 構建目錄
- 保持 Unity 項目代碼邏輯一致性
- 封裝統一通信接口供 Flutter 調用
2. Android 平臺封裝為 AAR
2.1 使用 Unity as a Library 模式
Unity 官方支持將項目打包為 AAR 庫,供外部 App 集成。
配置方式:
- 打開 Unity → Build Settings → Android → Export Project
- 導出后在 Android Studio 中構建成 AAR
- 修改
launcher
和unityLibrary
的gradle
腳本
2.2 集成方式
Flutter 插件的 Android 層通過 UnityPlayerActivity
啟動 Unity 頁面,或通過自定義容器集成 UnityView:
val unityView = UnityPlayer(this)
frameLayout.addView(unityView.view)
2.3 通信封裝
- Flutter ? Android 使用 MethodChannel
- Android ? Unity 使用
UnityPlayer.UnitySendMessage
- Unity ? Android 使用 AndroidJavaClass 回調
3. iOS 平臺封裝為 Framework
3.1 使用 Unity-iOS 構建導出
Unity 支持將項目構建為 iOS 工程。
- 打開 Unity → Build Settings → iOS → Build
- 使用 Xcode 打開并打包為 XCFramework(支持真機和模擬器)
xcodebuild -create-xcframework \-framework ios-arm64/UnityFramework.framework \-framework ios-x86_64-simulator/UnityFramework.framework \-output UnityRender.xcframework
3.2 集成方式
- 插件 iOS 層通過橋接調用 UnityFramework
- 自定義容器 UIViewController 加載 Unity
let unity = UnityEmbeddedSwift.shared
unity.showUnity()
3.3 通信封裝
- Flutter ? iOS 使用 FlutterMethodChannel
- iOS ? Unity 使用 UnityFramework API
- Unity ? iOS 使用原生回調 + NotificationCenter
4. Web 平臺封裝為 WebGL 模塊
4.1 Unity WebGL 構建
- Unity → Build Settings → WebGL → Build
- 配置
index.html
與Build/UnityLoader.js
推薦構建配置優化:
- 開啟壓縮
- 開啟 wasm streaming
- 設置合適的分辨率、內存上限
4.2 集成方式
- Flutter Web 頁面中嵌入 iframe 加載 WebGL 頁面
- 使用 JS Bridge 通信(如 postMessage)
<iframe id="unityFrame" src="unity/index.html"></iframe>
4.3 通信封裝
- Flutter ? iframe 使用 window.postMessage
- iframe ? Unity 使用 UnityLoader.SendMessage 或 jslib
- Unity ? iframe 通過 JS plugin 回調父窗口
5. 封裝總結對比表
平臺 | 渲染模塊 | 插件封裝形式 | 通信機制 |
---|---|---|---|
Android | AAR (UnityLibrary) | Flutter 插件 Android 目錄 | MethodChannel + UnitySendMessage |
iOS | XCFramework | Flutter 插件 iOS 目錄 | MethodChannel + UnityFramework API |
Web | WebGL 構建輸出目錄 | Flutter Web iframe 嵌入 | postMessage + JS Bridge |
6. 開發建議
- 建議使用統一的命名空間管理 Flutter 與 Unity 的通信協議
- 在三端封裝中都保留
initUnity
、sendMessage
、disposeUnity
等基礎接口 - 使用配置文件或參數傳入方式控制加載場景和渲染內容,提升靈活性