Unity项目嵌入原生Android项目 - Go语言中文社区

Unity项目嵌入原生Android项目


说明:

通过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

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

原因应该是多个ModelManifest文件中的application标签中的属性因为相同从而冲突了

解决方法:
在主项目中(也就是APP)中的Manifestmanifest标签加如下属性:
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);

在主界面MainActivitylayout 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添加一个标签
打开ARManifest,在activity标签加如下属性
android:configChanges="screenSize|keyboardHidden|orientation"

我给每个窗口都添加了一个,以防万一要用。

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

如果我把28改成了27或者26等等,都会报错。

 

解决2017版本内嵌Vuforia导出的libsaar文件会报错的问题

解决方法:

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


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


然后就可以了。

大功告成!!

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/f1017641044/article/details/80827621
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-18 23:12:31
  • 阅读 ( 1059 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢