原书前言
2017年第三季度的硬件销售量,是虚拟现实(Virtual Reality,VR)硬件产业的一个新的里程碑。在经历了几年的使用率低下和销售不景气后,制造商售出了100万台VR头盔。这一成功震惊了许多科技作家,他们曾预言VR技术会被早期使用者和技术发烧友束之高阁。然而,在现代消费级头盔发布后,VR产业还是看到了其巨大的推动力,同时,各种场景下VR的大量使用也让VR开发人员数量迎来了蓬勃增长。随着头盔成本的降低和消费者市场的日益壮大,全球各地产业都在投资VR技术。这并不局限于娱乐公司,制造业、医疗卫生行业、零售和教育行业也正在引领VR技术一些新的探索和应用。
我们看看Glassdoor、Indeed和Monster这些公司的情况吧。从纽约到休斯敦,再到雷德蒙德,在美国的每一个技术人才市场都在不断涌现出新的与VR开发相关的招聘信息。VR开发能力可谓炙手可热。
本书采用了一种实用的、项目式的方法来进行VR开发。我们使用了4个易理解的而又启发人思考的创意,在Unity开发平台上就实现VR项目的一些细节展开教学。每一个项目都从分步式指南开始,之后还包括对VR最佳实践、设计选择、技术挑战的讨论,以及对读者自己的解决方案进行改进和实现的指导建议。
我们期望你在学习完本书后,能够获得一套新的技能并热爱上VR开发,同时具备使用Unity平台创建丰富的、沉浸式体验的想法和创意。
适用读者
你是否想过创建自己专属的VR体验?是否想过创建一个沉浸式环境?手头是否有一款VR头盔?如果你的答案都是“Yes”的话,那么本书正是为你准备的!本书内容既适合开发人员,也可帮助新手上手学习。最好具备一些Unity游戏引擎的知识,不过即使是开发新手也可以跟上并适应书中的分步式教程。
本书内容
“第1章 VR的过去、现在和未来”,详细介绍了虚拟现实平台,从起步阶段,到当今的硬件设备。该章介绍了视觉暂留、立体视觉和触觉反馈,这些要素的结合将虚拟世界和物理世界真正连接起来。
“第2章 为Google Cardboard构建一个‘太阳系’”,这是一个简单的入门项目,使用Trappist-1 Solar System作为背景向新手介绍VR开发。
“第3章 为Gear VR构建图片画廊系统”,使用虚拟实地考察(VR行业的基石)来演示如何创建虚拟场景。该章还列出了一个用户参与的计划进程。这个入门级项目也是为你迅速熟悉项目开发而准备的。
“第4章 为虚拟画廊项目添加用户交互”,用案例说明了VR沉浸的关键就在于用户交互。在该章中,我们对图片画廊进行扩展,使其接受用户输入,进而引出沉浸感这一主题。我们会创建一系列控制器脚本,用于在VR空间中选择图片和画廊。该项目是面向中级Unity开发人员的,但是其中的操作和方法适合于所有开发人员。
“第5章 在Oculus Rift上展开‘僵尸’大战”,探讨了第一人称射击类型游戏。无论是第一人称还是第三人称的射击游戏,几十年来都已经被牢牢地确立为顶级游戏类型。“僵尸”大战第一部分涵盖了环境的构建、射线系统的实现,以及使用状态机来控制动画预制件的播放。与此同时,我们还给出了一些优化VR体验的技巧。
“第6章 为Oculus Rift编辑‘僵尸’脚本”,这是“僵尸”大战的第二部分。该章详细介绍了如何构建控制“僵尸”和玩家进行交互的脚本。如果你有Unity脚本编程经验,理解起来会更容易,新手也完全不用担心,因为我们的操作说明非常详尽。
“第7章 嘉年华游乐场游戏(上)”,这个项目中我们将一起构建社区嘉年华中常见的两个小游戏。这一部分包括了构建环境、讨论关卡设计的相关技巧,以及规划传送系统。
“第8章 嘉年华游乐场游戏(下)”,提供了关于添加UI元素、各种游戏对象脚本编程、项目收尾的说明。作为终极任务,你需要对本章内容做一些拓展,通过添加Asset Store中的物品或是自定义游戏对象,来营造嘉年华气氛。
“附录A VR设备概览”,罗列了一些现有的VR头盔,主要提供产品的细节、规格以及价格比较。
“附录B VR相关概念”,为想更进一步理解书中概念的读者提供了一些额外的VR术语讲解。该附录中还包含了有关输入、移动和设计用户体验的最佳实践。
如何最有效地利用本书
开始书中所列项目之前,要先做几件事。首先,需要一台满足Unity 3D系统需求的Mac或PC。可以访问https://docs.unity3d.com/Manual/system-requirements.html以查看你的计算机配置是否符合软件运行需求。
本书使用的是Unity 3D游戏引擎免费版。如果你对Unity引擎并不熟悉,可以访问https://docs.unity3d.com/Manual/UsingTheEditor.html,该教程介绍了Unity软件界面和基本游戏对象。Unity引擎在不断进行改进,版本不断更新。每月都会发布一些新的补丁,每年大概会进行两三次主版本更新。因为更新很快,所以你最好安装最新版本的Unity软件。
开发项目时除了需要计算机外,还要配备VR头盔来对环境进行完整测试。
我们设计了几个针对不同平台的教程:Google Cardboard(项目:“太阳系”)、三星GearVR(项目:图片画廊),以及Oculus Rift(项目:“僵尸”大战、嘉年华游戏)。当然,构思都是通用的,只要略做调整,就可以将其应用在其他设备上。
每个硬件平台都需要相应的软件开发工具包(SDK)或自定义Unity软件包来帮助Unity和VR设备进行通信。每个项目的开头都有安装说明。记得检查与已安装Unity版本的软件兼容性,这点也很重要。可以通过下载网站或Unity的VR设备部分(https://docs.unity3d.com/Manual/XRPluginArchitecture.html)完成兼容性检查。
下载示例代码
可以通过以下步骤下载代码文件:
1)打开www.packtpub.com,登录或注册。
2)选择“SUPPORT”选项卡。
3)单击“Code Downloads&Errata”。
4)在搜索框输入原书的书名,然后跟着屏幕提示进行操作即可。
下载文件后,请确保使用以下软件的最新版本进行解压:
??Windows系统:WinRAR/7-Zip。
??Mac系统:Zipeg/iZip/UnRarX。
??Linux系统:7-Zip/PeaZip。
本书代码在GitHub上也能下载:https://github.com/PacktPublishing/Virtual-Reality-Blueprints。
第1章 VR的过去、现在和未来
1.1 虚拟现实的历史
1.2 透过镜子
1.3 让静态图片动起来
1.4 越大越好——全景图
1.5 立体镜
1.6 为何要止步于看和听——视觉之味和多感官剧场Sensorama
1.7 Link飞行模拟器和阿波罗计划
1.8 交互性和真正的头戴式显示器
1.8.1 1960年——TelesphereMask
1.8.2 1961年——Headsight
1.8.3 1965年——Ultimate Display
1.8.4 1968年——Teleyeglasses
1.8.5 1968年——达摩克利斯之剑
1.8.6 1968年——“所有演示之母”
1.8.7 1969年——驾驶舱/头盔虚拟视景
1.8.8 1969年——人工现实
1.8.9 1995年——CAVE
1.8.10 1987年——VR和VPL
1.8.11 1989年——任天堂Powerglove
1.9 20世纪90年代——VR爆发
1.9.1 1991年——Virtuality DactylNightmare
1.9.2 1993年——世嘉VR眼镜
1.9.3 1995年——VRML
1.9.4 1995年——任天堂Virtual Boy
1.9.5 1995年——Hasbro 公司Toaster
1.9.6 2013年——Oculus Rift
1.9.7 2014年——Google Cardboard
1.9.8 2015年——三星Gear VR
1.9.9 2018年——Magic Leap
1.10 小结
第2章 为Google Cardboard构建一个“太阳系”
2.1 平台设置
2.2 Google Cardboard设置
2.3 配置Unity环境
2.4 构建TRAPPIST-1系统
2.5 构建应用程序
2.5.1 Android操作步骤
2.5.2 iOS操作步骤
2.6 小结
第3章 为Gear VR构建图片画廊系统
3.1 虚拟图片画廊
3.1.1 三星Gear VR平台
3.1.2 过程概览
3.2 VR入门
3.3 VR开发前准备
3.4 获取Oculus SDK
3.5 制作全景Skybox
3.6 制作Gallery预制件
3.6.1 可选自定义字体
3.7 构建画廊
3.7.1 制作图片显示元素(FullImage对象)
3.7.2 制作控制器及场景控制器脚本
3.7.3 制作Gallery 预制件
3.8 小结
第4章 为虚拟画廊项目添加用户交互
4.1 促进用户交互 // 49
4.1.1 Raycaster
4.1.2 StandaloneInput模块
4.1.3 图片选择器脚本
4.1.4 场景控制器
4.1.5 图片收集
4.1.6 添加照片
4.1.7 使用高亮材质作为反馈
4.1.8 赋值
4.2 用户交互定案
4.3 使用事件触发器作为用户反馈
4.4 构建应用
4.4.1 创建osig文件
4.4.2 Android设备准备工作
4.4.3 构建Android应用
4.5 小结
第5章 在Oculus Rift上展开“僵尸”大战
5.1 与“僵尸”共舞
5.2 Oculus Rift平台
5.3 过程概览
5.4 配置Unity环境
5.5 创建Player游戏对象
5.5.1 Graphic Raycaster
5.5.2 添加3D摄像机
5.6 构建游戏环境
5.6.1 建立游戏边界
5.6.2 设置气氛
5.6.3 创建重生点
5.7 优化VR体验
5.7.1 帧率是决定性能的关键
5.7.2 减少过多的场景几何体
5.7.3 光照映射
5.8 创建“僵尸”预制件
5.8.1 制作“僵尸”资源动画
5.8.2 添加过渡条件
5.9 小结
第6章 为Oculus Rift编辑“僵尸”脚本
6.1 编制“僵尸”脚本
6.1.1 召唤“僵尸”
6.1.2 控制“僵尸”预制件
6.1.3 反击
6.2 设置气氛
6.3 构建可执行应用
6.4 小结
6.5 扩展体验
第7章 嘉年华游乐场游戏(上)
7.1 再现嘉年华游戏
7.2 前期制作
7.3 特别提示
7.4 需求
7.5 过程概览
7.5.1 Rift平台VR开发前Unity设置
7.5.2 加载OVRP
7.5.3 设置项目
7.5.4 创建玩家化身
7.5.5 设计游玩区
7.5.6 构建游戏环境
7.5.7 对抗VR“疾病”
7.5.8 实现移动
7.6 使对象可抓取
7.7 小结
第8章 嘉年华游乐场游戏(下)
8.1 备份项目
8.1.1 本地备份
8.1.2 Unity协作
8.1.3 软件版本控制服务
8.2 游乐场摊位游戏
8.2.1 打地鼠道具
8.2.2 地鼠动画
8.2.3 构建动画状态机
8.2.4 编写地鼠资源脚本
8.2.5 编写地鼠游戏控制器脚本
8.2.6 打地鼠游戏收尾
8.2.7 扔奶瓶道具
8.3 构建应用
8.4 扩展游戏
8.5 小结
附录
附录A VR设备概览
A.1 VR设备概述
A.2 头显参数
附录B VR相关概念
B.1 VR术语和定义
B.2 最佳实践入门