大家还记得第七场Unity官方的技术直播课程中那只可爱的小狗Akira吗?这只名为Akia的小狗正是在Unity中基于ARCore进行开发的。
《Akira》项目展示如何在ARCore的摄像机世界中放置一只可爱的小狗Akira,并在Akira在平面上朝目标点走动。下面是效果图。

204957fwawbgc39gt3wa8g.jpg

设置Android设备

请开启开发者模式。

205033vqfmc8flerkyrkqy.jpg

允许USB调试。

205047xv8qq3dyzx3vkknc.jpg

下载并安装ARCoreService,下载地址:https://github.com/google-ar/arc ... /arcore-preview.apk。

使用USB连接Android设备到你的开发用机,安装ARCoreService 服务,使用以下命令。

adb install -r -d arcore-preview.apk

设置项目

首先将你的目标平台换成Android。在Project Settings找 Android Player Settings。并进行一下设置:
Other Settings > Multithreaded Rendering: off
Other Settings > Package Name: 你的应用的ID,如com.example.helloAR
Other Settings > Minimum API Level: Android 7.0 及以上版本
Other Settings > Target API Level: Android 7.0 及以上版
XR Settings > ARCore Supported: on

在场景中添加ARCoreDevice预制件

当ARCore插件导入Unity后,我们可以在当前场景中添加ARCoreDevice。这是ARCore当核心组件,负责Camera图像当采集,以及摄像机位置追踪等功能。

205115fa8aazaagara0z38.jpg

第二步-点云可视

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

205133jsll8i6z69667cnz.jpg

第三步-平面检测和碰撞

搭建好基本环境后,我们就是开始关键的一步了,在摄像机世界中寻在放置点。ARCore提供了在摄像机世界中进行射线与平面进行碰撞检测的方法,因此,当我们识别出平面后,我们可以方便的在平面上找到我们的放置点。在本项目中,我们在AkiraSceneController.cs的脚本中实现了相关的功能。

205150vovbe3bz8m889jkv.jpg

具体而言,ARCore提供了Session.Raycast的方法来实现射线与平面碰撞检测的功能,并把碰撞点的信息保存在TrackableHit结构中。

205204acxxn0j3z014s3q4.jpg

第四步-创建锚点及放置Akira

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

205224rf33lomg0gl5gwez.jpg

第五步-编译运行

通过以上步骤,我们就可以把可爱的Akira放到摄像机的世界中了。我们现在就可以编译运行了。Unity会自动把生成好的Android APK包安装到移动端设备上,自动运行后,你可以看见一只活泼可爱的小狗Akira了。

资源

我们已经提供了完整的工程代码,你可以访问下载: http://forum.china.unity3d.com/static/u3d/Akira.zip

在Unity Connect上,你可以温习我们的直播课程,地址:https://connect.unity.com/p/ji-z ... ian-arcoreying-yong
https://v.qq.com/x/page/g0567prv4xc.html

总结
上面就是ARCore开发中的一些基础问题。希望大家了解了这些基本功能后,能创造出更加丰富多彩的AR应用。后面我们还会继续分享一些开发中的实用技巧在Unity官方中文社区(unitychina.cn),请保持关注!


Unity, 游戏锐亚教育

锐亚教育 锐亚科技 unity unity教程