![]() ![]() |
Unity虚拟现实开发实战(原书第2版) 读者对象:游戏开发者、虚拟现实技术感兴趣人员、Unity初学者、3D设计师、游戏设计师、游戏制作人、游戏策划、游戏开发者、游戏爱好者、想要进入虚拟现实领域的程序员
本书将带你进行一系列实战,并深入讨论如何使用Unity游戏引擎开发VR应用程序。本书通过基于项目的实践方法,帮助你快速了解使用Unity进行VR开发的具体细节。通过Oculus、Daydream和Vive等设备的体验,你将学习如何使用Unity开发VR应用程序。在众多主题和项目中,你将探索基于凝视与手柄控制器输入、世界坐标系UI画布、移动与远程传送、软件设计模式、360°多媒体、时间轴动画与多人网络。通过交互式Unity编辑器,你将了解Unity 3D游戏引擎,并且学习C#编程。
Unity已经成为新一代消费级VR设备构建虚拟游戏、虚拟应用和虚拟体验的主流平台。
本书将带你进行一系列实战,并深入讨论如何使用Unity游戏引擎开发VR应用程序。 本书通过基于项目的实践方法,帮助你快速了解使用Unity进行VR开发的具体细节。你将学习使用Unity开发基于Oculus、Daydream与Vive设备的VR应用程序,探索基于凝视与手柄控制器输入、世界坐标系UI画布、移动与传送、软件设计模式、360°多媒体、时间轴动画与多人网络等众多的主题或项目,还将通过可交互式Unity编辑器(Editor)了解Unity 3D游戏引擎,并学习C#编程。 通过阅读本书,你将学到: ●在学习世界坐标系与缩放比例时,使用Unity和其他3D工具创建3D场景。 ●为特定的头戴式显示器,包括Oculus、Vive与Daydream创建并运行VR应用程序。 ●使用眼睛凝视、手柄控制器以及用户输入事件与虚拟对象进行交互。 ●使用移动与传送漫游VR场景。 ●使用物理与粒子系统实现音频火球游戏。 ●基于传送与数据信息实现艺术画廊。 ●使用音轨与时间轴设计并创建VR故事动画。 ●使用Unity网络创建社交VR体验。
【前言】
如今,我们正在见证虚拟现实(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渲染。
乔纳森林诺维斯(Jonathan Linowes)创立了Parkerhill Reality Labs(一个沉浸式媒体独立工作室),是BridgeXR工具包、Power Solitaire VR游戏以及即将到来的Chess Or Die游戏的开发者。他是VR/AR的传播者、Unity开发者、企业家和教师。他拥有美国雪城大学(Syracuse University)的艺术学士学位和麻省理工学院媒体实验室(MIT Media Lab)的硕士学位。他曾在Autodesk公司和其他公司担任技术领导职务。他撰写了《Unity Virtual Reality Projects 》(2015年第1版)《Cardboard VR Projects for Android 》(2016) 和 《Augmented Reality for Developers 》(2017)。
译者序
前言 审阅者简介 第1章 万物皆可虚拟 1 1.1 虚拟现实对你来说意味着什么 2 1.2 头戴式显示器的类型 3 1.2.1 桌面VR 3 1.2.2 移动VR 3 1.3 虚拟现实与增强现实的区别 4 1.4 应用与游戏 5 1.5 虚拟现实是如何运作的 7 1.5.1 立体3 D视图 7 1.5.2 头姿追踪 9 1.6 VR体验类型 10 1.7 VR必备技能 11 1.8 本书涵盖的内容 12 1.9 本章小结 12 第2章 内容、物体和缩放比例 14 2.1 Unity入门 14 2.1.1 新建Unity项目 15 2.1.2 Unity编辑器 15 2.1.3 默认世界坐标系 16 2.2 创建简单的透视图 17 2.2.1 添加立方体 18 2.2.2 添加平面 18 2.2.3 添加球体和材质 19 2.2.4 改变场景视图 21 2.2.5 添加照片 22 2.2.6 给地平面着色 23 2.3 测量工具 24 2.3.1 随手保留一个单位立方体 24 2.3.2 使用网格投影器 24 2.3.3 测量Ethan角色 25 2.4 使用第三方内容 27 2.5 使用Blender创建3D内容 29 2.5.1 Blender简介 29 2.5.2 单位立方体 31 2.5.3 UV纹理图片 32 2.5.4 导入Unity 34 2.5.5 一些观察 35 2.6 在VR中创建3D内容 35 2.6.1 导入和导出Tilt Brush模型 37 2.6.2 使用Google Poly进行发布和导入 38 2.7 在VR中使用EditorXR编辑Unity 39 2.7.1 设置EditorXR 40 2.7.2 使用EditorXR 41 2.8 本章小结 43 第3章 VR的构建和运行 44 3.1 Unity VR支持和工具包 44 3.1.1 Unity的内置VR支持 45 3.1.2 特定于设备的工具包 46 3.1.3 应用程序工具包 47 3.1.4 基于Web和JavaScript的VR 47 3.1.5 3D世界 48 3.2 为你的平台启用虚拟现实 48 3.2.1 设置目标平台 49 3.2.2 设置XR SDK 50 3.2.3 安装设备工具包 50 3.2.4 创建MeMyselfEye播放器预制件 50 3.3 构建SteamVR 52 3.4 构建Oculus Rift 53 3.5 构建Windows沉浸式MR 55 3.5.1 设置Windows 10开发人员模式 56 3.5.2 在Visual Studio中安装UWP支持 56 3.5.3 UWP构建 57 3.6 为Android设备设置 58 3.6.1 安装Java开发工具包 59 3.6.2 安装Android SDK 59 3.6.3 使用命令行工具 60 3.6.4 关于Android SDK根路径位置 61 3.6.5 安装USB设备调试和连接 61 3.6.6 配置Unity外部工具 62 3.6.7 为Android配置Unity Player Settings 63 3.7 为GearVR和Oculus Go构建 63 3.8 为Google VR构建 64 3.8.1 Google Daydream 64 3.8.2 Google Cardboard 65 3.8.3 Google VR运行模式 66 3.9 为iOS设备设置 67 3.9.1 拥有Apple ID 67 3.9.2 安装Xcode 67 3.9.3 配置iOS的Unity Player Settings 68 3.9.4 构建和运行 68 3.10 本章小结 69 第4章 基于凝视的操控 70 4.1 游走者Ethan 70 4.1.1 人工智能Ethan 71 4.1.2 NavMesh烘焙 72 4.1.3 镇上的随机游走者 74 4.1.4 RandomPosition脚本 74 4.1.5 “僵尸”Ethan 76 4.2 向我看的方向行走 77 4.2.1 LookMoveTo脚本 77 4.2.2 添加反馈光标 79 4.2.3 穿透对象观察 80 4.3 如果眼神可以杀人 81 4.3.1 KillTarget脚本 81 4.3.2 添加粒子效果 83 4.3.3 清理工作 84 4.4 Unity C#编程简介 84 4.5 本章小结 86 第5章 便捷的交互工具 87 5.1 设置场景 88 5.1.1 创建气球 88 5.1.2 使之成为预制件 88 5.2 基本按钮输入 90 5.2.1 使用Fire1按钮 90 5.2.2 OpenVR的扳机键 92 5.2.3 用Daydream控制器单击 93 5.3 轮询单击 93 5.3.1 按钮界面功能 94 5.3.2 创建并释放气球 95 5.3.3 按住按钮给气球充气 96 5.4 使用脚本化对象进行输入 98 5.4.1 创建脚本化对象 99 5.4.2 填充输入操作对象 100 5.4.3 访问输入操作对象 101 5.4.4 使用脚本化对象进行模拟测试 101 5.5 使用Unity事件处理输入 102 5.5.1 调用输入操作事件 103 5.5.2 订阅输入事件 103 5.6 使用双手 105 5.6.1 将气球设为手柄的子对象 105 5.6.2 让气球爆炸 107 5.7 交互项目 108 5.7.1 使用SteamVR交互系统进行交互 109 5.7.2 使用Daydream VR Elements进行交互 110 5.8 本章小结 112 第6章 世界坐标系UI 113 6.1 学习VR设计原则 114 6.2 可重用的默认画布 116 6.3 护目镜HUD 118 6.4 十字光标 120 6.5 挡风玻璃HUD 122 6.6 游戏元素UI 124 6.7 使用文字特效插件TextMeshPro 125 6.8 信息框 126 6.9 响应输入事件的游戏内仪表板 129 6.9.1 创建带有按钮的仪表板 129 6.9.2 连接水管与按钮 131 6.9.3 用脚本激活按钮 132 6.9.4 用注视高亮显示按钮 133 6.9.5 注视并单击选择 135 6.9.6 注视并聚焦选择 136 6.10 使用VR组件指向并单击 136 6.10.1 使用Unity UI和SteamVR 137 6.10.2 使用Unity UI和Daydream 139 6.11 构建基于手腕的菜单栏 139 6.12 本章小结 140 第7章 移动与舒适 141 7.1 理解Unity角色 141 7.1.1 Unity组件 142 7.1.2 Unity的Standard Assets 143 7.2 使用滑行移动 145 7.2.1 沿视线方向移动 145 7.2.2 保持脚着地 146 7.2.3 不要穿透固体对象 147 7.2.4 不要在边缘坠落 149 7.2.5 跨越小物体并处理崎岖路面 149 7.2.6 开始与停止移动 150 7.3 添加舒适模式移动 150 7.4 传送技术 153 7.4.1 凝视传送 153 7.4.2 在表面之间传送 155 7.4.3 传送生成点 157 7.4.4 其他传送考虑因素 160 7.5 传送工具包 161 7.5.1 使用SteamVR交互系统传送 161 7.5.2 使用Daydream Elements传送 162 7.6 重置中心和位置 163 7.7 对付VR晕动症 164 7.8 本章小结 166 第8章 使用物理引擎 167 8.1 Unity的物理组件 167 8.2 弹力球 169 8.3 管理游戏对象 171 8.3.1 销毁坠落的对象 172 8.3.2 设置持续时间 172 8.3.3 实现一个对象池 172 8.4 用头部射击游戏 176 8.5 球拍游戏 180 8.6 射手游戏 182 8.7 完善场景 185 8.7.1 创建大火球 186 8.7.2 Skull环境 188 8.7.3 音频同步 190 8.8 本章小结 191 第9章 漫游和渲染 192 9.1 用Blender构建 192 9.1.1 构建墙体 193 9.1.2 添加天花板 194 9.2 用Unity组装场景 197 9.2.1 画廊 197 9.2.2 艺术品部件 198 9.2.3 展览计划 200 9.3 将图片添加到画廊中 202 9.4 管理艺术信息数据 204 9.4.1 使用列表 204 9.4.2 使用数据结构 205 9.4.3 使用脚本化对象 206 9.5 显示艺术信息 208 9.5.1 创建标题牌匾 209 9.5.2 详细的交互信息 210 9.5.3 调整图像宽高比 212 9.6 漫游画廊 213 9.6.1 在画像之间传送 213 9.6.2 考虑房间规模 215 9.6.3 动画穿越 216 9.7 本章小结 218 第10章 利用360? 219 10.1 360岸嗝教? 219 10.1.1 等距圆柱投影 220 10.1.2 VR正在侵入你的视野 220 10.1.3 180岸嗝教? 221 10.1.4 立体360岸嗝教? 221 10.2 有趣的光球 222 10.2.1 水晶球 222 10.2.2 地球仪 224 10.3 渲染光球 225 10.3.1 编写自定义内部着色器 226 10.3.2 魔法球 228 10.3.3 光球 229 10.3.4 播放360笆悠? 230 10.4 使用Unity天空盒 232 10.4.1 六边形或立方体天空盒 233 10.4.2 球面全景天空盒 234 10.4.3 360笆悠堤炜蘸? 235 10.4.4 3D立体天空盒 236 10.5 在Unity中捕捉360岸嗝教? 236 10.5.1 捕捉立方体贴图和反射探头 236 10.5.2 使用第三方库360安痘? 图像 238 10.5.3 Unity内置立体360巴枷窈? 视频捕获 239 10.6 本章小结 240 第11章 动画与VR讲故事 241 11.1 撰写我们的故事 241 11.1.1 收集资源 242 11.1.2 创建初始场景 243 11.2 Timeline和音频轨道 245 11.3 使用Timeline激活对象 247 11.4 录制Animation Track 248 11.4.1 正在生长的树 248 11.4.2 正在生长的鸟 249 11.5 使用动画编辑器 249 11.6 动画的其他属性 252 11.6.1 动画的灯光 252 11.6.2 动画脚本组件属性 253 11.6.3 控制粒子系统 255 11.7 使用动画剪辑 257 11.8 使用动画控制器 258 11.8.1 动画和动画器的定义 259 11.8.2 ThirdPersonController动画 259 11.8.3 Living Bird动画器 260 11.8.4 学习飞行 262 11.8.5 对鸟进行攻击 264 11.8.6 飞走 264 11.9 让故事更具互动性 265 11.9.1 期待播放效果 265 11.9.2 重置初始场景设置 267 11.9.3 更多互动的想法 268 11.10 本章小结 268 第12章 社交化的VR虚拟空间 269 12.1 多玩家网络 270 12.1.1 网络服务 270 12.1.2 网络架构 271 12.1.3 本地与服务器 271 12.1.4 Unity的网络系统 272 12.2 建立简单的场景 273 12.2.1 创建场景环境 273 12.2.2 创建虚拟角色的头部 274 12.3 添加多玩家网络 275 12.3.1 Network Manager和HUD 275 12.3.2 Network Identity和Sync Transform 275 12.3.3 作为一个主机运行 276 12.3.4 添加出生点位 276 12.3.5 运行游戏的两个实例 277 12.3.6 关联虚拟角色与第一人称角色 278 12.4 添加配对大厅 280 12.5 同步对象和属性 281 12.5.1 设置头球游戏 282 12.5.2 通过联网射击球 284 12.5.3 同步球变换 285 12.5.4 状态变量同步 286 12.6 高级网络主题 287 12.7 语音聊天选项 288 12.8 使用Oculus平台和虚拟角色 288 12.8.1 Oculus平台权限检查 289 12.8.2 添加本地虚拟角色 290 12.8.3 添加远程虚拟角色 291 12.9 构建和共享自定义VRChat会议室 292 12.10 本章小结 294 第13章 优化性能和舒适度 295 13.1 使用Unity的Profiler和Stats 296 13.1.1 Stats窗口 296 13.1.2 Profiler窗口 297 13.2 优化艺术品 298 13.2.1 设置场景 299 13.2.2 抽取模型 302 13.2.3 透明材质 303 13.2.4 细节层次 304 13.3 使用静态对象优化场景 307 13.3.1 设置场景 307 13.3.2 灯光和烘焙 307 13.3.3 遮挡删除 309 13.4 优化代码 310 13.4.1 了解Unity的生命周期 311 13.4.2 编写高效的代码 312 13.4.3 避免费时的API调用 313 13.5 优化渲染 313 13.5.1 批次处理 314 13.5.2 多通道像素填充 315 13.5.3 VR优化着色器 316 13.6 运行时性能和调试 316 13.6.1 Daydream 317 13.6.2 Oculus 318 13.7 本章小结 318
你还可能感兴趣
我要评论
|