使用 ARFoundation 进行 AR 入门介绍

您好,
我是横滨办事处开发部的松山先生。

我做了一些增强现实(AR)测试,因为它可能会带来一些工作机会。我
会把测试过程以备忘录的形式记录在我的博客上。

提前准备

■ 工具和插件
首先,我们来准备环境。
使用 Unity 进行测试可能是最快捷的方法。

・Unity 2019.3.0b11

虽然是测试版,但最新的修复版本(2019.2.13f1)无法正确显示AR相机,所以我目前使用的是2019.3版本。Unity
Hub真的非常方便。
*在我撰写这篇博文期间,2019.3的修复版本(2019.3.0f1)发布了。
在这个版本中,AR相机可以正常工作了。

• AR 插件
• AR Foundation (2.1.4)
• ARKit XR 插件 (2.1.2) * 适用于 iOS

创建新项目后,请从包管理器导入。
顺便一提,之前可用的 UnityARKit 插件已不再可用,现在 AR 开发似乎需要通过 AR Foundation 进行。
这次我们只计划在 iOS 上进行测试,因此只导入 ARKit。如果还需要支持 Android,则还需要导入 ARCore。
包管理器真的非常方便。

■ 项目设置(iOS)
・公司名称、产品名称和版本标识符可以
随意填写。・在“偏好设置”中启用“自动签名”会更方便
。・由于使用了摄像头,请在“摄像头用途描述”中输入合适的描述
。・勾选“需要 ARKit 支持
”。・需要 iOS 11 或更高版本,因此请将最低 iOS 版本设置为“11.0”。
・架构为“ARM64”。

■ 构建设置
由于我们是在 iOS 上运行,
请选择 iOS 作为平台
,将 Xcode 中的运行方式更改为“Debug”
,选中“开发构建
,然后运行“切换平台”。

* AR Foundation 是
ARKit 用于 iOS
,ARCore 用于 Android
一个多平台 AR 工具,支持两种操作系统:

为场景添加增强现实功能

创建一个合适的场景(默认场景即可)
,删除主摄像机,因为我们将使用AR摄像机
,并将以下对象添加到层级视图中作为AR功能:
AR会话原点
和AR会话。
就这么简单。

飞机的图形显示


这样就可以设置成用黑色边框和半透明板显示检测到的平面。

1. 创建一个平面以显示为平面(XR → AR 默认平面)
。2. 将创建的平面转换为预制件,并将其从层级视图中移除
。3. 将“AR 平面管理器”组件添加到 AR 会话原点,以显示检测到的平面
。4. 将步骤 2 中的预制件设置为“AR 平面管理器”组件的“平面预制件”
。5. 如果只需要水平平面,请将“检测模式”设置为“水平”。

在增强现实空间中放置物体

触摸检测到的平面即可显示物体。这包括:
将“AR Raycast Manager”添加到 AR 会话原点以检测触摸坐标,
并编写代码在触摸坐标处生成物体。

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; public class ARManager : MonoBehaviour { [SerializeField] private GameObject objPrefab; private ARRaycastManager raycastMan; private List<ARRaycastHit> hitResults = 新的列表<ARRaycastHit>(); void Awake() { raycastMan = GetComponent<ARRaycastManager> (); } void Update() { if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); if (touch.phase != TouchPhase.Ended) { return; } if (raycastMan.Raycast (touch.position, hitResults, TrackableType.All)) { Instantiate (objPrefab, hitResults[0].pose.position, hitResults[0].pose.rotation); } } } }

- 将创建的代码(类)作为组件添加到 AR 会话原点。-
将要显示的对象注册为 ObjPrefab。

你想显示的对象

立方体或球体都可以,不过既然都说到这儿了,我就去资源商店找个合适的模型吧。
我把搜索范围缩小到3D免费资源,最后决定用“太空机器人凯尔”。
我导入了模型,创建了一个虚拟形象让它动起来,并调整了一下,让它能响应UnityChan的动作。
这部分只是我的业余爱好,所以细节我就不赘述了。

请检查实际设备。

让我们在真机上构建并测试一下。
- 打开构建设置并运行构建
- 启动生成的 Xcode 项目
- 连接要安装的设备并在 Xcode 中选择它
- 按 ▶︎ 构建并运行

运行程序后,触摸位置会生成一个物体,就像这样。

*出于隐私考虑,我模糊处理了人脸,但看起来确实有点可疑……

总结

设置过程非常简单。
只需几个步骤,你就能实现类似《勇者斗恶龙:漫步》中的“怪物AR”功能。
一开始,我差点遇到Unity版本的问题(AR摄像头在2019.2版本中无法显示),但
除此之外,我觉得没什么大问题。
要说缺点的话,
那就是不能在Unity编辑器里测试,每次都得重新编译,有点麻烦。

下次我打算测试一下如何将 GPS 和谷歌地图连接起来!

最后

我已推出“SEKARAKU Lab”,这是我所属系统开发公司的服务网站。Beyond
提供从服务器设计、构建到运维的一站式服务,如果您在服务器端开发方面遇到任何问题,欢迎随时联系我们。SEKARAKU
Lab:[https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)

好了,今天就到这里。

如果您觉得这篇文章对您有帮助,请点个“赞”!
0
加载中...
0票,平均分:0.00/10
3,460
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

松山健翔

我曾在一家游戏开发公司工作多年,负责编程和项目管理等工作。
2019年,我加入Beyond Inc.,在横滨办公室工作。
我主要负责服务器端开发的项目管理(偶尔也参与编程)。
我的爱好是公路自行车赛和观看赛马。