如何通过Unity AR Foundation结合Flutter构建并部署Android应用?
解决方案:Unity AR Foundation 项目通过 Flutter 部署到 Android 设备
一、Unity 导出产物的存放位置
- 导出 Unity Android 项目时,你需要手动指定一个空文件夹作为导出路径(例如
D:\Unity_Exports\AR_Project),所有 Android 原生工程文件(包括AndroidManifest.xml、gradle 配置、依赖库等)都会生成在这个文件夹内。 - 若遗忘导出路径,可重新打开 Unity 项目,点击
File > Build Settings,Android 平台的Export按钮旁会显示上次的导出路径(如有)。
二、Flutter 集成 Unity 导出项目的核心步骤
由于是将 Unity 导出为 Android 原生工程后嵌入 Flutter,而非使用 Unity 官方 Flutter 组件,因此 Unity 菜单中不会出现 Flutter 相关按钮,需手动完成集成:
1. 创建/打开 Flutter 项目
打开命令行执行以下命令(若已有 Flutter 项目可跳过):
flutter create ar_flutter_app cd ar_flutter_app
2. 嵌入 Unity 导出的 Android 工程
将 Unity 导出的整个 Android 项目文件夹复制到 Flutter 项目的android目录下,重命名为unityLibrary(便于后续配置识别)。
3. 修改 Flutter 项目的 Android 配置文件
(1)编辑android/settings.gradle
添加以下内容:
include ':unityLibrary' project(':unityLibrary').projectDir = new File(settingsDir, 'unityLibrary')
(2)编辑android/app/build.gradle
- 在
dependencies块中添加依赖:
implementation project(':unityLibrary') implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + '/libs', include: ['*.jar'])
- 确保
minSdkVersion与 Unity 导出项目的版本一致(Unity 2020.3.25 默认是 API 24,可在unityLibrary/build.gradle中查看并调整)。
4. Flutter 代码中调用 Unity 界面
在main.dart中通过MethodChannel触发 Unity 场景启动(AR 场景更适合直接打开 Unity 的 Activity):
import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('AR Flutter 应用')), body: Center( child: ElevatedButton( onPressed: _launchUnityAR, child: const Text('打开 AR 场景'), ), ), ), ); } void _launchUnityAR() async { const platform = MethodChannel('com.example.ar_flutter_app/unity'); try { await platform.invokeMethod('launchUnity'); } on PlatformException catch (e) { print("调用失败: ${e.message}"); } } }
5. Unity 导出工程中配置通道逻辑
在unityLibrary/src/main/java/[你的Unity包名]/UnityPlayerActivity.java中添加 MethodChannel 处理代码:
import io.flutter.plugin.common.MethodChannel; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.embedding.engine.dart.DartExecutor; public class UnityPlayerActivity extends UnityPlayerActivity { private static final String CHANNEL = "com.example.ar_flutter_app/unity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FlutterEngine flutterEngine = new FlutterEngine(this); flutterEngine.getDartExecutor().executeDartEntrypoint( DartExecutor.DartEntrypoint.createDefault() ); new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL) .setMethodCallHandler((call, result) -> { if (call.method.equals("launchUnity")) { result.success("Unity AR 场景已启动"); } else { result.notImplemented(); } }); } }
三、构建并部署到 Android 设备
- 连接 Android 设备,开启USB 调试模式。
- 在 Flutter 项目根目录打开命令行,执行:
flutter build apk --release flutter install
或直接用 Android Studio 打开 Flutter 项目,点击 Run 按钮选择已连接的设备完成部署。
注意事项
- Unity 导出时必须勾选
Export Project选项(Build Settings 的 Android 平台设置中),才能生成完整的 Android 原生工程。 - echo3D 的配置已在 Unity 项目中完成,导出后无需额外修改,确保 AndroidManifest 中包含 AR 所需权限(AR Foundation 会自动配置)。
- 若遇到 gradle 同步错误,检查两个项目的 gradle 版本是否一致,可统一使用 Unity 导出项目中的 gradle 版本。
内容的提问来源于stack exchange,提问作者Jenny Cross
相关产品推荐
相关产品推荐

