Unity ARKit示例:第2部分

创建一个Hello World应用程序。

本文是从Unity ARKit开始的系列文章的一部分, 示例:第1部分

你好,世界

我们首先构建使用Unity-ARKit-Plugin的绝对最小应用程序:

我们首先创建一个支持Unity-ARKit-Plugin的场景:

  1. Unity中 ,我们创建一个新文件夹, 资产>场景,并在其中创建一个新场景,例如Hello World。
  2. 我们修改主相机 ; 将“ 变换”>“位置”设置为(0、0、0),并将“ 摄像机”>“清除标志”设置仅深度
  3. 我们将Unity AR Video脚本添加到主摄像机 。 然后我们将Unity AR Video> Clear Material设置Assets> UnityARKitPlugin> Plugins> iOS> UnityARKit> Materials> YUVMaterial
  4. 我们将Unity AR Camera Near Far脚本添加到主摄像机
  5. 我们创建一个新的空GameObject ,例如ARCameraManager,并向其中添加Unity AR Camera Manager脚本。 我们将Unity AR Camera Manager> Camera设置为主摄像机
  6. 我们将预制资产Assets> UnityARKitPlugin> ARKitRemote> ARKitRemote添加到场景中

现在,我们为应用程序添加了一些特定的东西,例如,我们添加了具有以下内容的多维数据集

  • 转换:(0,0,2)
  • 比例尺:(0.3,0.3,0.3)
  • 旋转度:(0,45,0)

设置好此位置后,我们将按照“ Unity ARKit示例示例:第1部分”中“ 使用ARKitRemote ”部分中的说明进行操作。 Unity中运行该应用程序。

观察结果:

  • 重要的是将“ 游戏”窗格的大小设置为与纵向iOS设备相同的长宽比; 否则立方体会变形

现在,我们按照示例Unity ARKit:第1部分的构建过程小节中的说明进行操作。 将应用程序构建并加载到iOS设备。 请记住以下几点:

  • 将包标识符更改为您的应用程序独有的名称; 就我而言com.larkintuckerllc.hellounityarkit
  • 确保仅在构建中包括Hello World场景

现在,在iOS设备上运行该应用程序,我们可以看到将多维数据集投影到我们的房间中。

观察结果:

  • 前一天晚上,我碰巧以黑色为背景运行该应用程序。 在这种情况下,立方体将在房间周围跳舞。 猜想这是有道理的,因为应用程序没有什么要定位的

Hello World(点云)

Hello World应用程序仅间接使用Unity-ARKit-Plugin; 将立方体投射到我们的房间。 让我们更新应用程序以直接使用它提供的API。

提供的许多API是可以订阅的事件。 其中最简单的是ARFrameUpdate。 根据事件的名称,我认为该事件与Unity的Update事件非常相似。 它经常发生,用于观察ARKit中的变化。

在此示例中,我们在每个ARFrameUpdate上显示ARKit点云中的点数

那么,什么是点云?

使用ARFrame rawFeaturePoints属性获取点云,该点云表示ARKit用于执行世界跟踪的场景分析的中间结果。

—苹果— ARPointCloud

由于点点云由ARKit后台使用,因此我们永远不需要直接进行交互。 但是,探索既有趣又有益。

我们首先创建GameObjects以显示数字:

  • 进入Hello World场景,我们创建一个UI> Image GameObject; 用作背景
  • 我们在Canvas GameObject中创建一个Text GameObject(与Image GameObject一起自动创建); 重命名为PointCount
  • 我们将PointCount的默认文本设置为0,并对齐中心

观察:

  • EventSystem GameObject也会与Image GameObject一起自动创建

现在,我们创建一个脚本(和中间文件夹)并将其添加到PointCount中以显示检测到的点数。 资产/脚本/ Hello World / PointCount.cs:

观察结果:

  • 观察到,当我们将iOS设备聚焦在遥远的墙壁(左)时,ARKit会检测到很少(2)个点
  • 当聚焦于具有许多物体的近景时,ARKit会检测到许多(149)点

下一步

在下一篇文章Unity ARKit通过示例:第3部分中 ,我们将构建一个应用程序,该应用程序将更广泛地使用Unity ARKit