如何将Unity开发的游戏集成到原生Android应用并打包为单APK?
Unity游戏集成到原生Android应用的实现方案
当然可以,完全能实现把Unity开发的游戏模块嵌入原生Android应用,最终打包成单一APK的需求。下面是具体的实现步骤:
一、先做好准备工作
- 确保你装了:最新版Unity(要支持Android构建)、Android Studio(配置好Android开发环境,SDK、NDK版本得和Unity兼容)
- 提前把Unity游戏开发完并测试好,确保在Android平台能正常跑起来
二、Unity端导出Android兼容的项目
- 打开你的Unity项目,点顶部菜单
File > Build Settings,切换到Android平台,点Switch Platform完成平台切换 - 点
Player Settings,在Other Settings里做这些配置:- 设置
Package Name,必须和你原生Android应用的包名完全一样 - 勾选
Export Project选项 - 调整最低API级别、目标API级别这些配置,要和原生项目的参数匹配
- 设置
- 点
Export,选一个导出目录,Unity会生成一套Android Studio能直接用的项目结构,里面包含游戏的代码、资源和依赖库
三、把Unity模块集成到原生Android项目里
- 打开Android Studio,创建或打开你的原生Android项目(包名要和Unity导出的一致)
- 复制Unity导出项目里的关键内容到原生项目:
- 把Unity导出项目
libs目录下的所有.aar文件,复制到原生项目的app/libs目录 - 把Unity导出项目
src/main/assets下的bin、data文件夹,复制到原生项目的app/src/main/assets目录
- 把Unity导出项目
- 在原生项目的
app/build.gradle里加这些配置:dependencies { // 引入Unity的aar依赖 implementation fileTree(dir: 'libs', include: ['*.aar']) // 这里放你原生项目原本的其他依赖 } android { sourceSets { main { jniLibs.srcDirs = ['libs'] } } } - 处理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游戏互相传数据、调方法,可以这么做:
- 原生调用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");
五、打包测试
- 在Android Studio里点
Build > Build Bundle(s) / APK(s) > Build APK(s),就能生成合并后的APK文件 - 把APK装到Android设备上,测试原生模块和Unity游戏模块是否都能正常运行,交互逻辑有没有问题
内容的提问来源于stack exchange,提问作者Razia Rani
相关产品推荐
相关产品推荐

