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

如何将Unity开发的游戏集成到原生Android应用并打包为单APK?

Unity游戏集成到原生Android应用的实现方案

当然可以,完全能实现把Unity开发的游戏模块嵌入原生Android应用,最终打包成单一APK的需求。下面是具体的实现步骤:

一、先做好准备工作

  • 确保你装了:最新版Unity(要支持Android构建)、Android Studio(配置好Android开发环境,SDK、NDK版本得和Unity兼容)
  • 提前把Unity游戏开发完并测试好,确保在Android平台能正常跑起来

二、Unity端导出Android兼容的项目

  1. 打开你的Unity项目,点顶部菜单 File > Build Settings,切换到Android平台,点Switch Platform完成平台切换
  2. 点Player Settings,在Other Settings里做这些配置:
    • 设置Package Name,必须和你原生Android应用的包名完全一样
    • 勾选Export Project选项
    • 调整最低API级别、目标API级别这些配置,要和原生项目的参数匹配
  3. 点Export,选一个导出目录,Unity会生成一套Android Studio能直接用的项目结构,里面包含游戏的代码、资源和依赖库

三、把Unity模块集成到原生Android项目里

  1. 打开Android Studio,创建或打开你的原生Android项目(包名要和Unity导出的一致)
  2. 复制Unity导出项目里的关键内容到原生项目:
    • 把Unity导出项目libs目录下的所有.aar文件,复制到原生项目的app/libs目录
    • 把Unity导出项目src/main/assets下的bin、data文件夹,复制到原生项目的app/src/main/assets目录
  3. 在原生项目的app/build.gradle里加这些配置:
    dependencies {
        // 引入Unity的aar依赖
        implementation fileTree(dir: 'libs', include: ['*.aar'])
        // 这里放你原生项目原本的其他依赖
    }
    
    android {
        sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
            }
        }
    }
    
  4. 处理Unity的游戏页面:
    • 你可以直接启动Unity自带的UnityPlayerActivity打开游戏,也可以把Unity的游戏视图嵌入到原生的Fragment或者自定义View里
    • 如果要嵌入到Fragment,参考下面的代码:
      import com.unity3d.player.UnityPlayer;
      import androidx.fragment.app.Fragment;
      import android.os.Bundle;
      import android.view.LayoutInflater;
      import android.view.View;
      import android.view.ViewGroup;
      
      public class GameFragment extends Fragment {
          private UnityPlayer mUnityPlayer;
      
          @Override
          public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
              mUnityPlayer = new UnityPlayer(getActivity());
              return mUnityPlayer.getView();
          }
      
          @Override
          public void onDestroy() {
              mUnityPlayer.quit();
              super.onDestroy();
          }
      
          // 把生命周期事件传递给UnityPlayer,保证游戏正常运行
          @Override
          public void onPause() {
              super.onPause();
              mUnityPlayer.pause();
          }
      
          @Override
          public void onResume() {
              super.onResume();
              mUnityPlayer.resume();
          }
      }
      

四、原生和Unity的交互(可选)

如果需要原生应用和Unity游戏互相传数据、调方法,可以这么做:

  • 原生调用Unity:用UnityPlayer.UnitySendMessage("游戏物体名称", "脚本方法名", "要传的参数"),注意这里的“游戏物体名称”是Unity场景里实际存在的物体名,“脚本方法名”是该物体挂载脚本里的公开方法
  • Unity调用原生:用C#的AndroidJavaClass和AndroidJavaObject来调用原生方法,示例代码:
    AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    // 调用原生Activity里的nativeMethodName方法,传参数"test"
    currentActivity.Call("nativeMethodName", "test");
    

五、打包测试

  1. 在Android Studio里点Build > Build Bundle(s) / APK(s) > Build APK(s),就能生成合并后的APK文件
  2. 把APK装到Android设备上,测试原生模块和Unity游戏模块是否都能正常运行,交互逻辑有没有问题

内容的提问来源于stack exchange,提问作者Razia Rani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:01:43