UnityAR详解(UnityARcore)

🤔


开始前准备

开发和测试环境:

  • 搭载Android 7.0以上的部分安卓机型
  • Unity2017.3以上

项目流程

设置项目

  1. 首先将目标平台换成Android。在Project Settings找 Android Player Settings。并进行如下设置:
    Other Settings > Multithreaded Rendering: off
    Other Settings > Minimum API Level: Android 7.0 及以上版本
    Other Settings > Target API Level: Android 7.0 及以上版
    XR Settings > ARCore Supported: on
  2. 在场景中添加ARCoreDevice预制件,当ARCore插件导入Unity后,我们可以在当前场景中添加ARCoreDevice。这是ARCore当核心组件,负责Camera图像当采集,以及摄像机位置追踪等功能。

点云可视

  • 点云是对于图像上的众多特征点一个比较形象点描述,把这些特征点显示出来可以方便我们的调试。这部分的工作由PointCloud对象中的PointCloudVisualizer.cs脚本完成。点云数据可以从Frame中获得,然后,设置Mesh的顶点和索引,使用MeshTopology.Points的方法绘制出点云视图。

平面检测和碰撞
搭建好基本环境后,就开始关键的一步,在摄像机世界中寻在放置点。ARCore提供了在摄像机世界中进行射线与平面进行碰撞检测的方法,因此,当我们识别出平面后,可以方便的在平面上找到我们的放置点。具体而言,ARCore提供了Session.Raycast的方法来实现射线与平面碰撞检测的功能,并把碰撞点的信息保存在TrackableHit结构中。

创建锚点及放置物体
当找到物体的放置点后,我们需要在摄像机世界中创建我们的物体了。和在完全的世界坐标中创建物体不太一样的是,我们需要先创建一个锚点(Anchor)。这个锚点保存了摄像机当前所理解的物理世界的坐标到Unity世界坐标的映射。所以当物理世界坐标有些变化的时候,锚点也可以感知这样的变化。所以通常我们会先创建锚点,再把创建出来的虚拟物体挂载到锚点下面。

编译运行
通过以上步骤,我们就可以把我们的物体放到摄像机的世界中了。

宇 wechat
扫描二维码,订阅微信公众号