You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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 设备

  1. 连接 Android 设备,开启USB 调试模式。
  2. 在 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:10:56