使用AR Foundation制作圣诞AR小游戏
Daniel Fortes是一名Unity的开发者,他开发了一款资源插件AR+GPS Location,本文他将分享使用AR Foundation如何在十几分钟内开发中一款基于定位的圣诞AR小游戏。
随着AR技术发展以广泛运用,开发者可以在移动端设备上轻松构建增强现实体验。Unity开发了AR Foundation,它支持ARCore,ARKit以及未来新平台的的核心功能,让AR的开发变得更为轻松。
Daniel Fortes热衷于通过使用地理坐标或GPS,让AR与现实世界的定位相结合,这项技术称为基于定位的增强现实。
在圣诞节的时候,Daniel Fortes想给家里的孩子们开发一个有趣的AR小游戏,因此他购买了圣诞节主题的3D资源,使用AR Foundation和AR+GPS Location资源,仅花费十几分钟就开发出了一个精彩的AR圣诞小游戏。
学习准备
请访问Unity Asset Store资源商店下载AR+GPS Location 资源包,请访问:
https://assetstore.unity.com/packages/tools/integration/ar-gps-location-134882
了解Unity的移动端AR生态系统:AR Foundation,ARCore和ARKit,请点击此。
第一步:获取模型
首先获取想在现实世界看到的模型。
在这个项目中使用的资源包是在cgtrader上购买的,该资源包含预打包的Unity项目,因此只要导入项目就能使用3D资源。
然后,我们只需要移动对象来构建想要的内容。在项目中,制作了骑着雪橇的圣诞老人,雪橇由圣诞老人忠诚的驯鹿拉着。
实际效果如下图所示。
然后,我们添加了一些简单的粒子系统,得到下图效果。
第二步: 添加移动效果
项目的大致效果还不错,但还是有点乏味,我们要给它赋予更多活力。
我们打算在雪橇飞行的过程中,使驯鹿进行上下起伏的移动效果。最简单的实现效果是使用正弦函数让驯鹿在Y轴方向上下移动。
我们可以使用下面的代码创建MoveDeers脚本组件。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveDeers : MonoBehaviour {
List<GameObject> deers = new List<GameObject>();
public float amplitude = 1.0f;
public float speed = 1.0f;
float y0;
const float step = Mathf.PI / 10;
// 使用Start函数进行初始化
void Start () {
deers.Add(GameObject.Find("Deer"));
deers.Add(GameObject.Find("Deer (1)"));
deers.Add(GameObject.Find("Deer (2)"));
deers.Add(GameObject.Find("Deer (3)"));
y0 = deers[0].transform.localPosition.y;
}
//Update函数会在每帧调用一次
void Update () {
int i = 0;
foreach (var deer in deers)
{
i++;
Vector3 localPos = deer.transform.localPosition;
localPos.y = y0 + amplitude * Mathf.Sin(i * step + Time.time * speed);
deer.transform.localPosition = localPos;
}
}
}
添加组件到对象上,我们就得到了下图效果。
第三步:设置场景
现在我们使用AR Foundation进行场景设置。首先我们使用资源包管理器导入AR Foundation,根据目标平台导入ARKit或ARCore。
从Asset Store资源商店获取并导入AR+GPS Location资源包。
现在创建AR Foundation场景的基本结构。我们需要让二个对象位于场景的根位置:一个带有AR Session组件的AR Session对象,和一个带有AR Session Origin组件的AR Session Origin 对象。
我们还要让AR Session Origin对象成为主摄像机的父对象,并给主摄像机添加二个组件:TrackedPoseDriver 组件和AR Camera Background组件。在TrackedPoseDriver组件中将Pose Source设为Color Camera。
现在,我们为AR+GPS Location设置场景。我们需要添加额外的对象和组件。首先添加带有LocationProvider组件的LocationProvider对象。
LocationProvider组件会管理定位数据,控制更新数据的频率和定位数据的精确度。我们可以调整数值来选取最适合项目的值。
接下来,在AR Session Origin对象中创建对象并命名为ARLocationRoot,给ARLocationRoot对象添加二个组件:ARLocationOrientation组件和ARLocationManager组件。
ARLocationOrientation组件会确保ARLocationRoot对象的坐标系统和基本方向保持同步,从而使Z轴指向正北方向,同时X轴指向东边。ARLocationManager组件确保所有在场景放置的对象位于正确的位置。
第四步:雪橇飞动
我们将使用ARLocationMoveAlongPath组件,使圣诞老人和雪橇沿着预定的地理路线移动。
我们可以选取对象要通过的一组坐标点来构成路径,并设置沿着路径移动的速度。为此,我们首先创建ARLocationPath对象,这是一个ScriptableObject可编程对象,它能保存描述路径的数据,即由点集组成的地理坐标。
现在获取坐标,打开Google Maps,定位到自己的位置,选择“Maps”,单击“Create Map’”,然后就可以通过放置标记来绘制路径,如下图所示。
这样会得到路径的基本形状,然后单击路径点,复制经纬度坐标。
返回到Unity编辑器,依次点击Create/ARLocation/Path来创建新路径。设置定位点的数量,然后从地图上复制粘贴坐标值,并按自己的想法调整Altitude高度值。
请注意:高度值将相对于设备的初始高度,我们可以使用设备的传感器来获取绝对高度,但这样得到的结果通常不准确。
最后,指定路径到StantasSled对象的ARLocationMoveAlongPath组件,这就完成了。
第五步:编译运行
现在我们编译并运行项目,一个有趣的AR圣诞小游戏就产生了,下面的视频是游戏效果。
小结
仅需要简单的五步,我们就使用AR Foundation创作出了一个圣诞小游戏,是不是很简单。
中国的春节马上就要到来了,小编认为大家可以通过本文学习,创作一个类似“财神来到”的AR小游戏体验,为节日更增添一份气氛。
更多Unity教程,尽在Unity官方中文论坛(UnityChina.cn)
推荐阅读
官方活动
Unite Shanghai 2019暖冬特惠票限量销售中(倒计时)
2019年5月10日-12日上海,Unite大会强势回归。 暖冬特惠票正式开售,购票即获指定Asset Store资源商店精品21款资源的5折优惠券。[了解详情...]
购票链接:
http://UniteShanghai2019.bagevent.com
Unity全球学生开发挑战赛火热进行中(倒计时)
Unity面向全球的学生推出-Unity全球学生开发挑战赛,寻找全世界最具创意,展现自我的学生开发者团队。[了解详情...]
活动地址:
https://connect.unity.com/challenges/gsc2018
活动 | Unity for Humanity 2019挑战赛
参加Unity for Humanity挑战赛,向我们展示你的作品将如何改变世界。[了解详情...]
活动地址:
https://connect.unity.com/challenges/unityforhumanity
点击“阅读原文”访问Unity官方中文论坛