Foreword
上一篇介绍了Xcode项目集成Unity的步骤,本篇介绍AS项目集成Unity,其实在AS上集成相比Xcode简单多了,但也有不少坑需要注意。我们知道Unity可以直接打包apk,也可以导出AS或Eclipse工程,我的应用场景是已经有个Android Studio大项目了,Unity所做的功能属于其一部分,所以选择将Unity导出AS工程,为了方便主项目调用,还将Unity部分打包成aar。
环境:Android Studio 3.0 + Unity 2017
Step
1.将Unity工程导出AS工程
如下图红框处,Build System选择Gradle,Export Project勾选,按图中箭头把包名填好,不能使用Unity默认的,否则导出不了,点击Export导出。
导出结果:
2.AS导入上一步的工程,选择Import project (Gradle,Eclipse ADT,etc)
导入多半是会报错的,一般错误就是gradle版本没选对,按自己的情况选好就行了,比如我的是3.0.0。
3.继承UnityPlayer
此时我们来看看这个工程结构,就一个界面UnityPlayerActivity,因为做Unity游戏的话也不需要显示其它原生界面,网上有些教程就是用继承UnityPlayerActivity的方法来显示Unity,然而这样做不够灵活。查看UnityPlayerActivity我们可以发现真正关键的是UnityPlayer所以仿照UnityPlayerActivity直接操作UnityPlayer不就好了么,但是。。。但是这里有个坑,我直接用UnityPlayer正确显示了Unity界面,可是在退出含Unity界面的Activity时,整个应用退出了,难道有Bug导致整个应用崩了?经过查找,发现原来在UnityPlayer源码中:
这个kill方法在Activity finish时会被调用,然而它竟然给我把当前应用进程杀死了!没办法,自己写个类 MyUnityPlayer 继承它,并重写父类的kill方法。
package com.unity.demo;
import android.content.Context;
import com.unity3d.player.UnityPlayer;
public class MyUnityPlayer extends UnityPlayer {
public MyUnityPlayer(Context context) {
super(context);
}
@Override
protected void kill() {
//不要杀死当前应用进程
}
}
4.导出aar包
百度“Android Studio导出aar包”,发现还要创建Module,有那么麻烦吗?直接改build.gradle就行了。如下图,