配置Unity的Android环境
配置环境
1.在工具栏选择File -> Build Settings,在平台列表选择Android,点击Switch Platform转换平台。
2.在工具栏选择Window -> Package Manager,在界面中下载AR Foundation,ARCore XR Plugin。
3.在工具栏选择Edit -> Project Settings -> Player ->Other Settings,删除vulkan,取消Multithreaded Rendering。
遇到的错误
出现了如下错误:
1.D:\Download\artemplate-master\Temp\gradleOut\unityLibrary\src\main\java\com\unity3d\player\UnityPlayerActivity.java使用或覆盖了已过时的 API。
这只是个提示,提醒API已过时,但不影响运行。
2.Missing 'package' key attribute on element package at :arcore_client……。
关键出错点,解决办法参考:https://blog.csdn.net/lxbhahaha/article/details/111269980。
图像跟踪
图像跟踪的基本操作
1.建立一个参考图像库,为了更好的分类管理,在Assets下新建一个文件夹命名为ImageLib,右键Create -> XR -> Reference Image Library,将新建的参考库命名为RefImgaeLib。
Create Reference Image Library.png参考图像库用来存储一系列的参考图像用于对比,每一个图像跟踪程序都必须有一个参考图像库,但需要注意的是,参考图像库中存储的实际是参考图像的特征值信息而不是原始图像,这有助于提高对比速度与鲁棒性。参考图像库越大,图像对比就会越慢,建议参考图像库的图像不要超过1000张。
2.在Assets下新建一个Pictures文件夹,用来存放要识别的图像。选择刚刚新建的参考库(RefImageLib),在Inspector面板选择Add Image添加参考图像,选择要识别的图像,勾选Specify Size和Keep Texture of Runtime,并且设置Specify Size下面的Physical Size(这个值可以多尝试,确定一个合适的大小)。
Specify Size:为加速图像检测识别过程,一些底层SDK要求提供一个2D待检测图像的物理尺寸,所以如果要设置,这个值一定会是一个大于0的长宽值对,当一个值发生变化时,Unity会根据参考图像的比例自动调整另一个值。
3.在Assets下新建一个Prefabs文件夹,用来存放要显示的三维模型(可以先在Hierarchy面板新建模型后将其拖入Prefabs文件夹,并将Hierarchy中的模型删除掉)。
4.在Hierarchy面板右键Create -> XR -> AR Session Origin以及AR Session,详细介绍参考文章:
https://blog.csdn.net/yolon3000/article/details/93914012。
AR Session Origin组件的作用是将可跟踪对象(如平面和特征点)姿态信息转换为Unity场景中的最终位置、方向和比例。
AR中Session用来管理 AR 应用的状态、处理 AR 应用生命周期,是 AR API的主要入口,由其控制在目标平台上启用或禁用AR。
5.选择AR Session Origin,为其添加一个AR Tracked Image Manager组件,在Reference Library选项选择第一步新建的参考库RefImageLIb,在Tracked Image Prefab选项选择想要显示的三维模型。
6.测试运行。
遇到的问题
1.识别图像所显现的三维模型一直处于图片的中心位置,在Unity中调整模型的位置也无改变。
解决办法1:更改所识别图像为要显示的区域图像,这样显示的模型会出现在更改后的图像中心(伪改变位置)。
解决办法2:还是识别原本的图像,但可以增加一个Plane用来对照要识别的图像,将模型放置在想要显示的位置,把模型设为Plane的子物体,将Plane作为新的预制体,添加到AR Session Origin下的AR Tracked Image Manager组件的Tracked Image Prefab中。
注:所添加的Plane不能设置为固定大小,随着所识别图像的大小变化,Plane也应该变化,下面的一行代码为追踪识别图像尺寸的语句。
trackedImage.transform.localScale = new Vector3(trackedImage.size.x, 1f, trackedImage.size.y);
这里还有一个额外的注意点:由于脚本是通过控制父物体去适应识别图像的大小,从而改变父物体下子物体的大小,所以在加入子物体之前,务必要调整好父物体的比例,这样最后的子物体显示效果比例才正确。
网友评论