Unity & Android Studio 联合开发快速入门:环境配置、AAR 集成与双向调用教程

【Unity笔记】Unity & Android Studio 联合开发快速入门:环境配置、AAR 集成与双向调用教程

引言

Unity 与 Android Studio 的联合开发是移动应用混合开发的常见模式,允许 Unity 处理 3D/AR/VR 渲染,而 Android Studio 管理原生 UI、传感器和系统集成(如权限、通知)。通过 AAR(Android Archive)格式的插件集成,Unity 可以嵌入 Android App 中,实现无缝切换(如按钮点击打开 Unity 场景)。双向调用(Unity → Android 和 Android → Unity)通过 AndroidJavaObject 和 UnitySendMessage 实现,支持数据传递(如传递位置数据到 Unity 角色)。

本教程基于 Unity 2022.3 LTS+(兼容 Unity 6)和 Android Studio 2025.1(Android SDK 35+),聚焦 Android 平台(iOS 类似,使用 Framework)。预计入门时间:2-4 小时。核心流程:环境配置 → Unity 导出 AAR → Android Studio 集成 → 双向通信测试。适用于 AR 产品展示、游戏内购集成等场景。时间复杂度 O(1),性能开销低(AAR 加载 ~100ms)。

前提

  • Unity Hub 安装 Unity 2022.3+(带 Android Build Support)。
  • Android Studio 2025.1+(带 SDK/NDK)。
  • 设备:Android 8.0+ 真机(模拟器不支持 Unity 渲染)。

环境配置

1. Unity 环境准备

  1. 安装 Android 模块
  • Unity Hub > Installs > Add Modules > Android Build Support、Android SDK & NDK Tools、OpenJDK。
  1. 项目设置
  • 新建 3D 项目(或导入现有)。
  • Edit > Project Settings > Player > Android:
    • Company Name/Package Name: com.yourcompany.yourapp。
    • Minimum API Level: 26+;Target API Level: Automatic(35)。
    • Scripting Backend: IL2CPP(性能);Architecture: ARM64。
  • Build Settings > Player Settings > Publishing Settings > 创建 Keystore(用于签名)。
  1. 测试 Unity APK
  • Build Settings > Android > Build and Run(连接设备测试基本场景)。

2. Android Studio 环境准备

  1. 安装
  • 下载 Android Studio 2025.1(https://developer.android.com/studio)。
  • 安装 SDK(API 35+)、NDK(25+)。
  1. 新项目
  • Create New Project > Empty Activity。
  • minSdkVersion = 26;compileSdk = 35。
  1. 依赖配置(build.gradle (Module: app)):
   dependencies {
       implementation 'androidx.appcompat:appcompat:1.7.0'
       // Unity 相关(后续添加)
   }

AAR 集成:Unity 导出为 Android 库

3. Unity 导出 AAR 插件

Unity 支持 “Unity as a Library”(自 2019.4+),导出为 AAR 文件,便于 Android Studio 集成。

  1. Unity 项目准备
  • 创建简单场景:Cube + 旋转脚本(测试用)。
  • 添加 AndroidJavaClass 桥接(后续双向调用)。
  1. 导出步骤
  • Build Settings > Android > Export Project(生成 Gradle 项目)。
  • 打开生成的 Android 项目文件夹(Unity 导出到 build/gradle/)。
  • 在 Android Studio 中导入:Open an existing Android Studio project > 选择导出文件夹。
  • 修改 build.gradle (unityLibrary 模块):
    gradle android { compileSdk 35 defaultConfig { minSdk 26 targetSdk 35 } }
  • 构建 AAR:Build > Make Project(生成 unityLibrary-debug.aar,在 app/build/outputs/aar/)。
  1. Unity 侧桥接代码(AndroidJavaProxy,用于 Android 调用 Unity):
using UnityEngine;

public class AndroidBridge : AndroidJavaProxy
{
    public AndroidBridge() : base("com.yourcompany.unitybridge.UnityBridge") { }

    public void OnMessageFromAndroid(string message)
    {
        Debug.Log("Android 发送消息: " + message);
        // 处理消息,如旋转 Cube
    }
}

// 在 Unity 脚本中注册
public class UnityBridgeRegistrar : MonoBehaviour
{
    void Start()
    {
        AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
        activity.Call("registerUnityBridge", new AndroidBridge());
    }
}

4. Android Studio 集成 AAR

  1. 导入 AAR
  • 在 app/libs/ 复制 unityLibrary-debug.aar。
  • build.gradle (app):
    gradle dependencies { implementation(name: 'unityLibrary-debug', ext: 'aar') }
  • settings.gradle:
    gradle include ':unityLibrary-debug'
  1. AndroidManifest.xml 集成
  • 合并 Unity 的 Manifest(复制权限、Activity):
    xml <activity android:name="com.unity3d.player.UnityPlayerActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
  1. 启动 Unity
  • MainActivity.java(或 Kotlin): import com.unity3d.player.UnityPlayerActivity; import android.content.Intent; public class MainActivity extends UnityPlayerActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Unity 场景加载 Intent intent = new Intent(this, UnityPlayerActivity.class); startActivity(intent); } }
  • 构建 APK:Build > Make APK,安装测试。

双向调用:Unity ↔ Android 通信

5. Android → Unity 调用(UnitySendMessage)

Android 通过 UnitySendMessage 调用 Unity MonoBehaviour 方法。

  1. Unity 侧接收
public class UnityReceiver : MonoBehaviour
{
    public void OnAndroidMessage(string message)
    {
        Debug.Log("从 Android 接收: " + message);
        // 示例:改变 Cube 颜色
        GetComponent<Renderer>().material.color = Color.red;
    }
}
  1. Android 侧发送
// 在 MainActivity 或 Fragment 中
UnityPlayer.UnitySendMessage("GameObjectName", "OnAndroidMessage", "Hello from Android!");

6. Unity → Android 调用(AndroidJavaObject)

Unity 通过 AndroidJavaObject 调用 Java 方法。

  1. Android 侧准备
// UnityBridge.java
public class UnityBridge {
    public static void showToast(String message) {
        Toast.makeText(UnityPlayer.currentActivity, message, Toast.LENGTH_SHORT).show();
    }

    public static String getDeviceInfo() {
        return "Android " + Build.VERSION.RELEASE;
    }
}
  1. Unity 侧调用
public class AndroidCaller : MonoBehaviour
{
    void Start()
    {
        AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
        AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext");

        // 调用静态方法
        AndroidJavaClass bridgeClass = new AndroidJavaClass("com.yourcompany.UnityBridge");
        bridgeClass.CallStatic("showToast", "Hello from Unity!");

        // 获取返回值
        string deviceInfo = bridgeClass.CallStatic<string>("getDeviceInfo");
        Debug.Log("设备信息: " + deviceInfo);
    }
}

测试与调试

  1. 构建测试
  • Unity: Build Settings > Android > Build and Run(连接设备)。
  • Android Studio: Run > Run ‘app’(部署 APK)。
  1. 调试
  • Unity: Console 窗口查看日志。
  • Android: Logcat(Android Studio > View > Tool Windows > Logcat),过滤 “Unity”。
  1. 常见问题
  • AAR 加载失败:检查 build.gradle 依赖路径;确保 minSdk 匹配。
  • 通信异常:GameObject 名/方法名错误;使用 AndroidJavaException 捕获。
  • 权限:添加 。

最佳实践

  • 模块化:Unity 负责 3D 核心,Android 处理原生 UI/服务。
  • 数据序列化:JSON 传递复杂数据。
  • 性能:AAR 加载后缓存 AndroidJavaObject 引用。
  • 扩展:集成 Firebase/AdMob 等原生 SDK。

此教程提供完整入门框架。如果需要 iOS 版本或特定功能扩展,请提供更多细节!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注