本书将带你进行一系列实战,并深入讨论如何使用Unity游戏引擎开发VR应用程序。本书通过基于项目的实践方法,帮助你快速了解使用Unity进行VR开发的具体细节。通过Oculus、Daydream和Vive等设备的体验,你将学习如何使用Unity开发VR应用程序。在众多主题和项目中,你将探索基于凝视与手柄控制器输入、世界坐标系UI画布、移动与远程传送、软件设计模式、360°多媒体、时间轴动画与多人网络。通过交互式Unity编辑器,你将了解Unity 3D游戏引擎,并且学习C#编程。
封面图
目录
- 译者序
- 前言
- 审阅者简介
- 第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.6VR体验类型 10
- 1.7VR必备技能 11
- 1.8本书涵盖的内容 12
- 1.9本章小结 12
- 第2章内容、物体和缩放比例 14
- 2.1Unity入门 14
- 2.1.1新建Unity项目 15
- 2.1.2Unity编辑器 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.1Blender简介 29
- 2.5.2单位立方体 31
- 2.5.3UV纹理图片 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.1Unity VR支持和工具包 44
- 3.1.1Unity的内置VR支持 45
- 3.1.2特定于设备的工具包 46
- 3.1.3应用程序工具包 47
- 3.1.4基于Web和JavaScript的VR 47
- 3.1.53D世界 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.3UWP构建 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.1Google Daydream 64
- 3.8.2Google Cardboard 65
- 3.8.3Google 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.2NavMesh烘焙 72
- 4.1.3镇上的随机游走者 74
- 4.1.4RandomPosition脚本 74
- 4.1.5“僵尸”Ethan 76
- 4.2向我看的方向行走 77
- 4.2.1LookMoveTo脚本 77
- 4.2.2添加反馈光标 79
- 4.2.3穿透对象观察 80
- 4.3如果眼神可以杀人 81
- 4.3.1KillTarget脚本 81
- 4.3.2添加粒子效果 83
- 4.3.3清理工作 84
- 4.4Unity 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.2OpenVR的扳机键 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.1Unity组件 142
- 7.1.2Unity的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.1Unity的物理组件 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.2Skull环境 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.1360岸嗝教? 219
- 10.1.1等距圆柱投影 220
- 10.1.2VR正在侵入你的视野 220
- 10.1.3180岸嗝教? 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.3360笆悠堤炜蘸? 235
- 10.4.43D立体天空盒 236
- 10.5在Unity中捕捉360岸嗝教? 236
- 10.5.1捕捉立方体贴图和反射探头 236
- 10.5.2使用第三方库360安痘?
- 图像 238
- 10.5.3Unity内置立体360巴枷窈?
- 视频捕获 239
- 10.6本章小结 240
- 第11章动画与VR讲故事 241
- 11.1撰写我们的故事 241
- 11.1.1收集资源 242
- 11.1.2创建初始场景 243
- 11.2Timeline和音频轨道 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.2ThirdPersonController动画 259
- 11.8.3Living 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.4Unity的网络系统 272
- 12.2建立简单的场景 273
- 12.2.1创建场景环境 273
- 12.2.2创建虚拟角色的头部 274
- 12.3添加多玩家网络 275
- 12.3.1Network Manager和HUD 275
- 12.3.2Network 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.1Oculus平台权限检查 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.1Stats窗口 296
- 13.1.2Profiler窗口 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.3VR优化着色器 316
- 13.6运行时性能和调试 316
- 13.6.1Daydream 317
- 13.6.2Oculus 318
- 13.7本章小结 318