说明:
通过Unity开发android AR,导出项目作为一个模块嵌入到原生的Android项目中,并通过跳转的方式打开AR内容。本文档使用的是,Vuforia,有机会再试试其他的AR平台,例如AR CORE,ARKIT等
Unity版本:使用5.6.4 、2017.4.3
注意:如果是2017以下版本的话,打包出来的项目里面的libs是jar文件,在android studio可以直接引用。
如果2017版本的话,他内嵌了Vuforia,打包出来的只有一个AAR文件。如何解决AAR文件引导的问题。在最后有说明。
Android Studio版本:3.2 beta1
一.Unity操作:
制作好AR项目(这个很简单,略过)
导出一个Android项目
Unity导出Android,导出的包名要和安卓的包名一样。


得到安卓项目,大概是这个目录结构

接下来的重点就是android Studio的配置了
二.Android Studio(以下简称AS)操作
AS里面导入Unity创建的项目
这里测试先新建一个项目

然后一直下一步就好了。创建好了一个安卓项目

接着就开始在AS里导入我们刚刚从unity导出的安卓项目。
File->NEW->import Module

选择项目目录

导入成功后是这样的

然后根据我的版本情况会发生这个异常报错。

这个时候将刚刚导入进来的ar项目里面的Manifest文件里的这个节点删除掉。

还要将intent-filter节点删除掉,不然会发生冲突

然后sync Project一下。又出现了一个新的异常

这是因为unity导出的安卓项目版本不高,高版本AS的语法更新了,现在需要去ar项目的build.gradle修改一下。
将项目视图改成Project,打开build.gradle

修改dependencies{}。把compile改成implementation,然后sync Now

OK,现在报错没有了,可以开始配置我们两个项目的依赖了。

进入Project Structure

Dependencies标签--->右边的绿色加号----选择第三个


再接着回到刚刚AR项目的build.gradle中,将application修改成library,并且把applicationId这段注释掉

改完之后Sync一下。可以看到ar项目变成了一个library了

在刚刚的过程中,又会发生一个报错

原因应该是多个Model的Manifest文件中的application标签中的属性因为相同从而冲突了
解决方法:
在主项目中(也就是APP)中的Manifest为manifest标签加如下属性:
xmlns:tools = "http://schemas.android.com/tools"
application标签加:
tools:replace="android:icon,android:theme,android:allowBackup"

sync一下,报错解决了。

现在可以测试在安卓界面添加个按钮然后跳转到ar界面的效果了。
首先创建一个新的Activity

去到刚刚新建的Main2Activty中,将继承改成UnityPlayerActivity,删除掉setContentView(R.layout.activity_main2);

在主界面MainActivity的layout activity_main.xml中添加按钮

然后在MainActivity.java中添加按钮点击事件监听
public class MainActivity extends AppCompatActivity { private Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1=(Button)findViewById(R.id.button); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(MainActivity.this,Main2Activity.class); startActivity(intent); } }); } }

测试一下:
shift+f10打包到真机上测试一下


最后会出现一个问题,就是在旋转屏幕的时候,程序会崩溃,所以需要给VR窗口的activity添加一个标签
打开AR的Manifest,在activity标签加如下属性
android:configChanges="screenSize|keyboardHidden|orientation"
我给每个窗口都添加了一个,以防万一要用。

大功告成!
下面说一些注意事项
关于版本问题,我这个用的AS是3.2的,新建一个项目的时候
targetSdkVersion默认是28

如果我把28改成了27或者26等等,都会报错。
解决2017版本内嵌Vuforia导出的libs是aar文件会报错的问题

解决方法:
1.将导入的ar项目中的libs文件夹下的VuforiaWrapper.aar拷贝到主项目中的libs

2.然后将ar项目的build.gradle中的allprojects所有内容和
implementation(name: 'VuforiaWrapper', ext:'aar')复制到主项目的build.gradle,


然后就可以了。

大功告成!!
本文档详细介绍了如何将Unity开发的AR项目作为模块嵌入到原生Android应用中,涉及Unity导出设置、Android Studio配置、解决版本冲突及Manifest冲突等问题,特别提到了针对Unity 2017版本AAR文件的处理方法。

3060

被折叠的 条评论
为什么被折叠?



