Unity工程嵌入Android

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);

    }
}


这样做的话会出现两个问题:

  1. Unity界面下横屏会闪退
  2. Unity界面下Back无法响应会上一个activity

在网上查了很久之后发现很多人也遇到个第二个问题,而且我也试了一些方法,都不是太有效果。于是就尝试了在Unity下回调activity的函数,让其调用onDestory。
而这些解决就留到下一次再跟大家分享了

猜你喜欢

转载自blog.csdn.net/qq_33205561/article/details/72787115