AR游戏:基于Unity 5的增强现实开发

本书介绍如何基于Unity 引擎制作一个AR(增强现实)游戏。作者设计了一个类似于PokemonGo 的游戏,手把手指导读者一步步制作出来。开篇介绍如何设置针对iOS 及Android 手机平台的Unity 开发环境,接着把游戏角色投射到真实的地理环境中,然后根据真实地理信息生成猎物,并使玩家与之交互,最后介绍如何利用云存储保存游戏进度等,以让游戏更加完整。其中,如何设计并开发基于地理信息的模块,包括GIS、GPS 等入门介绍,以及通过对Unity 的详细介绍,带领读者快速入门Unity 游戏编程,对读者的帮助尤其明显。本书适合对手机游戏开发有兴趣的编程爱好者,只要具备一些程序语言基础,并不需要熟悉Unity 引擎。

任天堂|谷歌联袂献译 亲手实现Pokemon Go Unity大中华CTO作序力荐 掌握基于位置的AR游戏开发

原著作者简介
Micheal Lanham 是为petroWEB工作的一位解决方案架构师,目前居住在加拿大阿尔伯塔省的卡尔加里(Calgary, Alberta)。他目前的职责之一是开发具有先进空间搜索能力的综合GIS应用。他曾担任专业和业余游戏开发人员,制作桌面和手机游戏超过15年。2007年,Micheal接触到Unity 3D,从此以后就一直是Unity 3D狂热的粉丝和开发者。

译者
龚震宇是一位资深的游戏开发工程工程师,有十余年从事游戏开发的工作经验。曾在富士通从事编程工作,之后一直在神游科技从事游戏开发工作。
周克忠是一位谷歌专业AR开发工程师,长期从事增强现实相关研究和实践。

译者序
作为一名程序员,在游戏圈工作了十几年,这是第一次参与翻译工作,因为这本书的书名引起了我的兴趣:Augmented Reality Game Development,“Augmented Reality(AR)”这个词一下子就映入眼帘。最早认识这个词应该是在2011 年任天堂公司的3DS 上。这台掌机自带了一款AR 游戏,通过3D 液晶屏可以看到各种动画形象跃然于桌子或者地面上,效果非常震撼。但是从那以后,AR 从我的视野中淡出了,直到去年Pokemon GO 的突然走红。在这之后,国内也涌现出许多手机端的AR 游戏和应用,甚至过年时都流行起了AR“抢红包”。而随着谷歌Tango 手机和微软HoloLens 眼镜等设备的推出,AR 的应用必然会更加广泛。当然,我最关心的还是能否有更好的AR 游戏出现。
本书详细介绍了一个简单的AR 游戏的开发过程,非常适合想要一窥AR 开发之究竟的读者。本人也是带着这样的心态来翻译的,在翻译的过程中学习和验证,获益匪浅。希望读者也能从中找到乐趣,对于翻译中的一些瑕疵请多多包涵。
感谢翻译合作者Kai,感谢编辑的辛勤校对。另外,感谢我的宝贝女儿和在我翻译期间辅导女儿学习的妻子,你们给了我莫大的帮助和动力。
龚震宇

因为一个很偶然的机会,本来已经离开游戏圈,走向万恶金融界的我,又回到了游戏相关的行业,从事Google AR 和VR 技术在亚太国家的推广。恰好以前在EA 的同事沙鹰在朋友圈牵线,就决定参与翻译这本书。公司有规定,不论在哪里发表观点,都必须表明我与Google 的雇佣关系,这样读者可以假设我的观点带有偏见,请酌情考虑。
作为一个游戏人和铁杆玩家,我觉得,一个游戏最重要的还是得好玩。其次才是赚不赚钱,有没有独特的美术风格,复杂的画面渲染什么的。最典型的例子就是任天堂的游戏,过去十几年分辨率都是主机里面最低的,可它的游戏就是那么好玩。我一直以来都对任天堂致以最高的敬意,所以能够和震宇一起翻译这本书,我很欢乐。
游戏开发者一直都在探索新的人机交互,任天堂在这方面做出过很多尝试,比如很早就制作过VR 头盔。这在AR 领域,精灵宝可梦GO 也实现了前所未有的成功。这本书从精灵宝可梦GO 的功能出发,讲解怎么使用Unity,制作基于位置并利用地图、街景以及地点网络服务的AR 游戏,对开发者来说是一个很好的AR 游戏入门教材。
那么究竟什么才是AR。这个问题还没有确定的答案,世界上的开发者都在探索AR 是什么,可以做什么。维基百科上有一个观点,你想象一个一维的坐标轴,左边无穷远代表完全真实,右边无穷远代表完全虚拟。那么AR 就在坐标轴的左半边,代表负数的那部分;相对地,VR 就在坐标轴右边,代表正数的部分。可见AR 的定义不是绝对的,有很大的一段区域都可以叫作AR。中间一段区间也叫作XR 混合现实,然而这些定义有着非常模糊的边界。
实现AR 有很多种核心技术,GPS、StreetView、SLAM、计算机图形、计算机视觉、图像处理、基于大数据的机器学习等,都有切实的应用例子。本书讲解的基于位置的应用、微软的HoloLens、Google 的Tango,它们都属于AR 的应用。任天堂的3DS 里面就有基于卡片的AR 玩法,那也是一种早期AR;类似地,目前的技术已经可以做到基于卡片的AR 不需要一直盯着卡片也能实现设备定位。
从今年的行业动态来看,接下来基于计算机视觉的AR 将会慢慢走出实验室进入消费者领域,美国四大科技雇主公司F.L.A.G. 里面有三个都在做:4 月份的时候Facebook 推出了AR Studio,5 月份Google 在I/O 宣布基于Tango 的WorldSense 和VPS(视觉定位服务),6 月份苹果宣布了iOS 11 里面的ARKit。根据目前的信息来看,Google 的Tango 能获得的对现实世界的描述信息最多,因为它硬件上使用了专门的深度传感器和鱼眼镜头。相比之下苹果的ARKit 和Facebook 的AR Studio 只使用了一个或两个RGB 摄像头。当然,这只是我的推测,毕竟ARKit 和AR Studio都还没有正式对外公开,我还没有看过它们的文档。说不定苹果和Facebook 会拥有怎么样的黑科技呢!科技的发展早已不是线性的;十几年前在我上大学那会儿,人工智能教科书都说超级计算机也绝对没办法下围棋战胜人类;这不,5 月份Alpha Go 单机4 TPU 就挑战了人类冠军柯杰。
最近几年国内创业气息浓重,投资氛围也活跃,连习大大都鼓励大家创业。希望大家紧跟时代,在AR 这股风刚刚开始刮的时候就让自己站在风口,迎接被风吹起的感觉。
最后感谢翻译同伴震宇,感谢沙鹰牵线带来这本书,感谢编辑的提示和帮助。书中有一些句子为了通顺,采取了意译而不是直译,实属中英文的用词习惯差别太大。希望大家不要介意。
周克忠Kai
Google AR/VR 技术推广工程师
2017 年6 月26 日 新加坡

前言
在2016 年初,世界上大多数人对增强现实和基于位置的游戏知之甚少。当然,这一切都随着那一年Pokemon Go 的发布而改变了。一夜之间,这种游戏类型就不容置疑地成为了游戏开发的发展趋势。可能你已经玩过Pokemon Go,而且你阅读这本书正因为你对AR 和基于位置的游戏类型产生了兴趣。
在本书中,我们将详细探讨创建像Pokemon Go 这样的基于位置的AR 游戏的各个方面。基于位置的AR 游戏是代价昂贵的,需要为游戏中的一切建立很多服务,从地图映射到生成怪物。然而,我们开发的游戏将是零成本的,使用的都是可以免费获得的服务。虽然由于一些许可限制,这可能不是你可以用于商业发布的东西,但是一定能介绍给你大部分概念。而且在整个过程中,你还将学习如何使用一个伟大的工具Unity。另外,还会向你介绍游戏开发的许多其他概念。
本书涵盖内容
第1 章,准备开始,介绍了构成基于位置的AR 游戏类型和我们的虚构游戏Foody Go 的概念。随后是下载所有必需软件,并使用Unity 设置移动开发环境的所有步骤。
第2 章,映射玩家位置,首先介绍GIS、GPS 和地图映射的基本概念。然后说明如何应用这些概念,来生成实时地图并绘制玩家在游戏中的位置。
第3 章,制作游戏角色,在前一章的基础上构建,把我们简单的位置标识转换成一个移动的动画角色。这样,玩家在携带着移动设备走动时,可以看到他们的游戏角色在地图上四处走动。
第4 章,生成猎物,解释了Foody Go 的假设背景是关于捕捉实验怪物的。在本章中,我们学习了如何在玩家的周围生成怪物到地图上。
第5 章,在AR 中捕捉猎物,内容更加密集:通过访问设备相机引入游戏的集成AR 部分;引入用于投掷球的物理;追踪玩家的滑动输入;使用了生物的反应;并且使用新的游戏场景。
第6 章,保存猎物,致力于开发玩家的装备包,用于保存抓获的所有Foody 生物,以及其他有用的道具。在这里,我们让读者对于添加永久的存储和添加一个简单的库存场景有大致的了解。
第7 章,创建AR 世界,基于一个实时的数据服务,在玩家周围添加兴趣点。
第8 章,与AR 世界交互,让玩家与兴趣点进行互动。在我们这个简单的游戏中,玩家将能够出售他们捕获的怪物。
第9 章,完成游戏,告诉读者如何完成游戏,或者更好地编写自己的基于位置的AR 游戏。为了本书,我们将只开发Foody Go 这个示例游戏。
第10 章,疑难解答,涵盖了一些故障排除建议和技巧,以克服这些开发障碍。与所有的软件开发练习一样,都可能会遇到问题。
阅读前的准备
为了跟着本书的内容练习,你至少需要一台能够运行Unity 5.4+ 的计算机,以及一部可以运行Unity 游戏并配备GPS 的iOS 或Android 设备。
更多关于Unity 的系统需求请参考:https://unity3d.com/unity/system-requirements。
本书的目标读者
本书适用于任何有兴趣开发自己的Pokemon Go,基于位置的AR 游戏的读者。虽然本书假定你以前没有游戏开发技巧或Unity 开发经验,但需要你对C# 或类似的(C、C++、Java 或JavaScript)语言有基本的了解。