通过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
导出一个Android项目
Unity导出Android,导出的包名要和安卓的包名一样。
得到安卓项目,大概是这个目录结构
接下来的重点就是android Studio的配置了
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,
然后就可以了。
大功告成!!