Unity工程嵌入Android
在上一篇文章上已经在Unity上完成了AR相关的功能。在这次要做的项目中,需要把Unity开发的内容作为插件嵌入到Android工程当中。目前主要思路是:
- Unity完成AR功能
- Unity导出为Android工程
- Unity导出的Android工程处理为jar包放入主工程
- 在主工程中调用Unity工程的页面
首先我们先新建一个Android工程,并记录包名,在EasyAR的官网上使用这个Android的包名注册一个新的Key。然后把上次的Unity中的Key换成这一个新的Key。
之后我们就要把Unity导出成一个Android工程:
在Playersetting把Unity的安卓版本设定跟安卓工程处一样的最低版本
然后打开导出设置,在导出的时候选择红框的导出为安卓工程
导出完成后我们可以获得一个安卓工程文件夹,然后Imort到我们的AndroidStudio当中。
获得了一个android工程后,由于里面含有Unity的相关资源,所以比起打包成jar文件,打包成包含资源文件的arr文件要方便的多。所以我们就要修改一下把从Unity导出的工程打包成arr文件。
此处我们主要修改红框中的两个文件:
首先打开build.gradle,把
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.bnuzvrlab.macao.unity"
minSdkVersion 18
targetSdkVersion 25
}
中的applicationn改成library,然后去掉applicationId
修改后如下:
apply plugin: 'com.android.library'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 18
targetSdkVersion 25
}
然后修改Manifest文件,此处主要是把以下代码的
<application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false">
<activity android:label="@string/app_name" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale" android:name="com.bnuzvrlab.macao.unity.UnityPlayerActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
android:icon="@drawable/app_icon"
以及
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
去掉。< intent-filter >中去掉的可以让其不会生成另外的一个app,而icon去掉则是避免引起错误
处理结束之后,我们Rebuid Project 一下
切换到Project视图在下图的目录中就可以在找到我们生成的arr文件了
之后我们回到Android主工程当中。新建一个moudle,选择import .jar/.arr package,把刚才生成的arr文件引入主工程当中
在project struct这里给主工程的 app moudle添加刚才放入的arr包的依赖
这样就可以报Unity工程嵌入到Android 工程当中了
之后新建一个Empty Acitvity 并让其继承UnityPlayerNativeActivity这个类。并把setContentView(R.layout.activity_main_unity);去掉,我们就可以通过跳转到这个Activity来开启Unity界面了
具体代码:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.bnuzvrlab.macao.unity.UnityPlayerNativeActivity;
public class MainActivity_unity extends UnityPlayerNativeActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
这样做的话会出现两个问题:
- Unity界面下横屏会闪退
- Unity界面下Back无法响应会上一个activity
在网上查了很久之后发现很多人也遇到个第二个问题,而且我也试了一些方法,都不是太有效果。于是就尝试了在Unity下回调activity的函数,让其调用onDestory。
而这些解决就留到下一次再跟大家分享了