在原生android项目中嵌入unity是一个十分普遍的需求,特别是当要在android App中加入一些原生android不易实现的功能,如加载比较复杂的3d模型,显示复杂的动画,开启摄像头实现AR功能(实现AR本身不难,难的是处理各种复杂的模型与动画,原生代码借助三方库也挺繁琐)等。
在AndroidStudio中集成步骤如下:(基于Unity2018测试)
1. 从unity中导出基于gradle编译的Android Studio(以下简称AS)工程。

2. 进入导出的gradle工程目录,编辑文件build.gradle:
(1) apply plugin: 'com.android.application'改为:
apply plugin: 'com.android.library'
(2) 去除applicationId 'com.x.y',其中'com.x.y'是你项目的package id。
3. 再进入gradle工程的src/main目录,修改AndroidManifest.xml:
将:
<action android:name="android.intent.action.MAIN" /> |
<category android:name="android.intent.category.LAUNCHER" /> |
这段删除掉。
至此,Unity导出工程这边的修改完成。进入AS这边。
4. 在AS中新建一个测试工程(下称:主工程),然后通过File|New|Import Module...导入前面制作好的AS module。
5. 在主工程中打开AndroidManifest.xml文件,作如下修改:
(1) 在Manifest根节点添加一个属性:
(2) 在Application节点添加一个属性:
tools:replace="android:icon, android:theme" |
6. 选中主工程,点击右键,单击"Open Module Settings",进入Module设置界面,依照下面设置:
先切换到Dependencies页签,点击右边的+号,在弹出的下拉菜单中选择最后一个3 Module Dependency,然后选中我们前面导入的步骤1-3中做好的unity导出的module,这样让主工程依赖导入的module。
7. 新建一个从com.unity3d.player.UnityPlayerActivity继承的的Activity类,如:
import com.unity3d.player.UnityPlayerActivity; |
public class MyARActivity extends UnityPlayerActivity { |
8. 在主工程的AndroidManifest.xml中添加一个Activity节点,如下:
< activity android:name = ".MyARActivity" |
android:process = ":neobearAR" |

10. 在MainActivity.java中加入事件响应的过程:
Button arButton = (Button)findViewById(R.id.startBtn); |
arButton.setOnClickListener( new View.OnClickListener() { |
public void onClick(View view) { |
startActivity( new Intent(getApplicationContext(), MyARActivity. class )); |
11.编译,运行。