【前言】
如今,我们正在见证虚拟现实(VR)的迅猛发展,这是一项令人激动的技术,它有望改变我们与信息、朋友和整个世界进行交互的基本方式。
戴上一个VR头戴式显示器,你就可以观看立体3D场景,可以环顾四周,还可以在虚拟空间中四处走动,并使用定位手柄控制器与虚拟对象交互。你可以拥有完整的沉浸式体验,就像真正置身于某个虚拟世界一样。
本书通过基于项目的实践方式详细讲解如何使用Unity 3D游戏引擎进行虚拟现实开发。我们将使用Unity 2018和其他免费或开源软件来完成一系列实践项目、循序渐进的教程和深入的讨论。VR技术正在快速发展,我们将尝试获取基本的原则和技巧,以便实现具有沉浸感和舒适感的VR游戏和应用程序。
你将学习如何使用Unity来开发可以用Oculus Rift、Google Daydream、HTC Vive等设备进行体验的VR应用程序。我们将涵盖对于VR来说重要且可能独一无二的技术关注点。读完本书后,你将能够用Unity开发丰富的交互式虚拟现实体验程序。
多年前,我在大学学习3D计算机图形学,在研究生院学习用户界面设计,然后成立了一家小型软件公司,开发用于管理AutoCAD工程图的3D图形引擎,后来此业务出售给了Autodesk。在接下来的几年里,我专注于2D网络应用开发,在博客上记录我的技术探索,并致力于发展几家新的初创公司。然后,在2014年3月,我看到Facebook以20亿美元的价格收购了Oculus,这引起了我的兴趣。于是我立即订购了我的第一台VR头戴式显示器(Oculus DK2开发套件),并开始利用Unity开发小型VR项目。
2015年2月,我打算写一本关于Unity VR开发的书。Packt出版社马上接受了我的建议,于是到2015年8月,本书的第1版出版了。从提案、大纲、章节草稿、审查到最终定稿和出版,只花费了短暂的时间,我很痴迷于此。
在撰写本文时,Google Cardboard发布了,但是没有消费级VR设备。DK2没有手柄控制器,只有一个XBox游戏控制器。2015年11月,第1版发布几个月后,HTC Vive推出了房间规模VR设置,同时配套有定位手柄控制器。2016年3月,Oculus Rift消费者版本发布。直到2016年12月,也就是第1版出版近一年半之后,Oculus才发布定位手柄控制器。
自本书第1版出版以来,许多新的VR设备已经上市,硬件和软件功能得到改进,Unity游戏引擎也持续增加原生VR SDK集成和新功能来支持它们。随着行业的不断加速发展,Oculus、Google、Steam、Samsung、PlayStation、Microsoft等多家企业加入了竞争行列。
与此同时,在2016年,我与Packt合作出版了另一本书Cardboard VR Projects for Android,这是一本使用Java和Android Studio构建Google Daydream和Cardboard应用的非Unity VR书籍。(在这本书中,你可以学习为移动设备创建并使用自己的3D图形引擎。)然后在2017年,我与Packt合作编写了第三本书Augmented Reality for Developers,这是一本令人兴奋且被及时出版的书,它基于Unity的项目,适用于在iOS、Android和HoloLens设备上开发AR应用程序。
当开始修订本书的第2版时,我认为这将是一个相对简单的任务,只需要更新到当前版本的Unity、增加对定位手柄控制器的支持并进行一些调整即可。但是没那么简单!虽然第1版的许多基本原理和建议没有改变,但作为一个行业,我们在短短的几年里学到了很多东西。例如,在VR中实现蹦床(我们在第2版中删去了这个项目)真的不是一个好主意,因为这可能导致晕动症!
第2版进行了重大修订和扩展。每个章节和项目都已更新。我们将一些主题分为独立的章节,包括音频火球游戏(第8章)、动画(第11章)和优化(第13章)。我真诚地希望你能认为本书既有趣又专业,因为我们致力于创造出色的新VR内容和探索这个神奇的新媒介。
【本书读者对象】
如果你对虚拟现实感兴趣,想要了解它的工作原理或创建自己的VR体验,请阅读本书。无论你是不是程序员,是否熟悉3D计算机图形,是否刚开始接触虚拟现实,你都将从本书获益。当然,拥有任何Unity经验都是一种优势。如果你是Unity新手,也可以拿起这本书,但你可以首先从Unity官网上提供的一些入门教程入手(https://unity3d.com/ learn)。
游戏开发者可能已经熟悉本书中重新应用到VR项目中的概念,但可以学习到许多其他特定于VR的理念。已经了解如何使用Unity的移动设备设计师和2D游戏设计师将能发现另一个维度。工程师和3D设计师可能了解许多3D概念,但是可以学习如何使用Unity引擎开发VR。应用程序开发人员可能会欣赏VR潜在的非游戏用途,并可能希望通过学习来实现这一目标。
【本书主要内容】
●第1章介绍游戏和非游戏应用中消费级虚拟现实的新技术以及机会,包括对立体视觉以及头姿追踪的解释。
●第2章介绍Unity游戏引擎,我们将构建简单的立体模型场景,并介绍如何导入使用其他工具(如Blender、Tilt Brush、Google Poly和Unity EditorXR)创建的3D内容。
●第3章介绍如何设置系统以及如何在目标设备上构建和运行Unity项目,这些设备包括SteamVR、Oculus Rift、Windows MR、GearVR、Oculus Go以及 Google Daydream。
●第4章探讨VR摄像机与场景中对象的关系,包括3D光标和基于凝视的射线枪。该章还介绍如何使用C#语言进行Unity脚本编程。
●第5章讨论通过控制器按钮和可交互对象实现用户输入事件,涉及使用不同软件模式,包括轮询、可编写脚本的对象、Unity事件以及随工具包SDK提供的可交互组件。
●第6章给出使用Unity世界坐标系画布实现VR的用户界面(UI)的许多示例,包括护目镜(HUD)、信息框、游戏内对象和腕部菜单栏。
●第7章深入探讨在VR场景中移动自己的技巧,详细探讨Unity第一人称角色对象和组件、移动、远程传送以及房间规模VR。
●第8章探索Unity物理引擎、物理材质、粒子系统和更多C#脚本,同时我们创建了一个球拍游戏,让你可以在喜欢的音乐中击打火球。
●第9章介绍如何建立交互式艺术画廊,包括关卡设计、艺术作品照片、数据管理以及空间传送。
●第10章解释360°多媒体并在各种示例中使用它们,包括地球仪、光球和天空盒等。
●第11章介绍如何使用导入的3D资源和音轨、Unity时间轴和动画来创建完整的VR讲故事体验。
●第12章探索使用Unity Networking组件的多人游戏以及Oculus平台头像和VRChat会议室的开发。
●第13章演示如何使用Unity Profiler和Stats窗口来减少VR应用程序的延迟,包括优化3D艺术、静态照明、高效编码和GPU渲染。