基于Unity与SteamVR构建虚拟世界

网友投稿 625 2022-05-29

游戏开发与设计技术丛书

基于Unity与SteamVR构建虚拟世界

Building Virtual Reality with Unity and SteamVR

[美] 杰夫·W.默里(Jeff .W. Murray) 著

吴 彬 陈 寿 张雅玲 林 薇 苏晓航 译

The Translator’s Words 译者序

早在20世纪七八十年代,虚拟现实技术就已经进入人们的生活,然而由于体验的问题,当时消费者对这项技术并不满意,许多相关的产品均以失败告终。到了90年代,我国开始着手研究虚拟现实技术,由于技术和成本的限制,主要集中在军用和少数商用领域。直到近几年,国内互联网技术日趋成熟,虚拟现实技术才开始蓬勃发展,并越来越普遍地应用于各行各业,逐步得到人们的认可。Unity是一款广泛使用的游戏开发工具,是集场景创建、脚本编写、三维动画等多种互动内容于一体的专业游戏引擎,可以说是虚拟现实的软件基础。SteamVR则是一套功能完整的360°房间型空间虚拟体验系统,包含头戴式显示器、手持控制器、定位系统等硬件设施,是虚拟现实的硬件基础。简单来说,我们先在Unity中开发3D游戏项目,之后使用SteamVR来体验我们自己制作的游戏。听起来很容易,但是,我们需要记住,虚拟现实仍是一项发展中的技术,涉及的知识领域越来越多,越来越复杂,故对开发人员的能力也有一定的要求。

从全球范围来看,国内虚拟现实技术虽然用户数量多,市场前景大,但没有令人满意的开发企业,很多是靠用户自己在开发,故需要很多相关的教程书籍。当前,Unity的中文书籍有很多,基本能够满足不同层级用户的需求,但这些书籍大都关注于软件开发,比较综合的虚拟现实技术书籍不多,即使有也专业性太强,不好理解。再加上SteamVR设备昂贵,普通用户很少有设备去体验,更谈不上利用设备去开发。因此我们认为,市面上存在的关于虚拟现实技术的中文书籍数量和内容都不足以满足国内庞大用户群体的需求,尤其是在开发过程的调试、发布、校准和维护方面,仍然存在较大的空缺。

本书英文版是由Jeff W. Murray撰写,泰勒-弗朗西斯集团旗下CRC出版社出版发行的专著,在国外用户群中享有较高的评价。原书内容结合硬件说明和软件设计,通过简单的游戏实例一步步讲解虚拟现实的开发过程,其中包含VR硬件初始化、交互场景添加、用户界面创建、音频设置等用户在开发过程中经常会遇到的问题。基于这本英文原书所呈现出来的丰富内容,本着为国内VR爱好者奉献一份绵薄之力的初心,我们以崇敬之心力求将这本书原汁原味地呈现给大家,希望能为国内的VR用户提供一本内容全面、上手容易的参考书籍。

作为本书的译者,我们在翻译过程中一直本着客观中立的态度。原书中的一些程序脚本和设置参数可能会因为运行环境而出现错误,或者原书中使用的软件版本已经不是最新。总体来说,原书中的很多方法都是很巧妙的,值得参考借鉴。作为译者,我们也希望读者保持学习的态度,在书中寻求答案,然后结合自己的实际情况,找到问题的解决方法。

Preface 前 言

2017年,我们站在一个新技术园区的门口。我们看着其产值,想弄清楚在那里建造什么,以及怎么建造,很明显还有很多东西需要去发现。虚拟世界中没有规律,没有组织,没有边界,也没有我们为他人构建的边界。从哪里到哪里取决于我们。我们只是在学习人们对虚拟现实(VR)的反应,虚拟现实可以做什么,它在娱乐、学习、康复、体验和开发中似乎有无数的可能性。即便是最基本的界面:我们的网络爱好者如何与虚拟世界互动,也尚未决定。在虚拟世界中什么感觉是自然的?我们如何移动、触摸物体、感受对象、操纵环境?有很多人可以使用创建虚拟内容的工具,它们的范围也从未像现在这样广泛,有更多的人提出了令人兴奋的新东西。在提供技术以适应这种新体验的竞争中,硬件制造商正以最快的速度运行,以使VR更好、更强、更快。无论跑得多快,技术都不会停止发展和变化,而是将继续前进。我们也学无止境。新技术层出不穷,当你读完这本书的时候,参与开发,并试着塑造虚拟现实的未来,当然这些取决于你。不要害怕打破常规,尝试使用不同于过去的与游戏或模拟交互的替代方法。你是一个有远见的人,可以帮助塑造未来的VR风景。未来的虚拟体验将建立在今天的经验之上,所以要不断实验和创造惊人的新事物!最后记住要玩得开心,照顾好自己,也与人交好!

准备工作

你的设置成本将是一台个人开发电脑和你想要插入的硬件,以及所选择的VR设备,让我们快速看看还需要准备什么。

Unity(可以在Unity商店http://www.unity3d.com上找到):Unity和所需的SDK可以免费下载。Unity Personal是一个完整的Unity版本,只是其中有一些附加说明。你可以用Unity Personal做这本书里的所有事情,只要你有一个VR头戴式显示器来测试。任何关于是否需要付费版本的Unity的问题,你都可以先尝试用免费的个人版本来调试,在投入金钱之前看看Unity是如何运作的。

Steam客户端:Steam客户端是免费下载的,你可以访问Valve Software的库和游戏商店。从本质上讲,Steam是一个允许你下载和购买东西的应用程序,但是在这本书中,Steam是一个用来下载和运行SteamVR的应用程序。

SteamVR:SteamVR是一个基于开源虚拟现实库的系统。它为VR提供了一个平台。SteamVR在Steam客户端下运行。Unity将通过SteamVR系统与VR硬件进行交互。

C#编程知识:再次重申,这不是一本关于学习如何编程的图书。我将解释所有的代码是如何工作的,但是你需要知道一些C#知识,有许多书籍是专门针对C#学习的。编程是一门庞大的学科,试图同时教编程和VR开发是毫无意义的。这本书讲的是虚拟现实体验,而不是学习编程。当然,我将尽我所能解释一切!

本书的读者对象

Unity已经用自己的指南和教程完成了一项令人惊叹的工作,所以如果你以前从未使用过这个引擎,强烈建议查看一下Unity文档并遵循指南来进行编辑器基本操作。本书中有一个基本的速成课程,但我没有详细说明。我将尽我所能勾勒出流程、键盘快捷键以及在哪里单击以使预料的事情发生,但这不是一本教授Unity的书。

这不是一本关于编程的书,也不是一本关于用正确或错误方法编写代码的书。我们假设读者对C#编程语言有一定的经验,但是对于VR或VR为主的开发来说可能是陌生的。我觉得有一点很重要,我是一个自学成才的程序员,我也明白,有更好的方法编写程序,所以这是一本关于概念的书,不可避免地会有更好的方法来实现一些相同的目标。本书中的技术和概念提供了基础,而不是任何主题的最终结果。运用这些概念,领会它们,按照你想要的方式去做。最重要的是,试着享受它!

Acknowledgements 致 谢

我的夫人很棒,我的孩子们也很棒!当我没有动力的时候,他们总是激励着我继续前进。我的生命中有这么棒的人,这是多么令人欣慰啊!

我要特别感谢大家对我工作的信任和对我的大力支持:感谢HTC高级公关经理Michael Zucconi,衷心感谢HTC Vive团队的支持。感谢Leap Motion。感谢整个OSVR团队。非常感谢Noitom的刘浩洋(Haoyang Liu)和戴博士(Tristan Dai),以及北京和迈阿密的整个Noitom和感知神经元小组。在我的研究中,有无数的来源,特别感谢Alexander Kondratskiy在博客上分享他的研究和发现,另外感谢Dan Hurd和Evan Reidland分享的关于Lucky’s Tale的信息和哥伦比亚大学研究人员分享的他们对运动眩晕症的广泛研究。

感谢Brian Robbins让我开始写书,感谢Freekstorm游戏公司的Richard Bang分享关于SteamVR天空盒的技巧,感谢Hello Games的《No Man’s Sky》(我从小就梦想玩这个游戏),感谢Tami Quiring、Nadeem Rasool、Dwayne Dibley、Liz、Pete Smyth、Isaac、Aiden、

Jonah、Simona、Mike Desjardins、Jillian Mood、Christian Boutin、David Helgason、James Gamble、Oliver Twins、Jeevan Aurol、Rick King、Byron Atkinson-Jones、Aldis Sipolins、Ric Lumb,以及CRC Press/AK Peters的整个团队,包括Jessica Vega和Robert Sims,Nova Techset的每个人,尤其是Ragesh K。

谢谢你购买本书。希望我能告诉你,知道别人在读这本书是多么棒。VR的潜力超越了我们长期以来所看到的一切,它超越了形式和惯例。虚拟世界不受限制,开放接纳新思想,它已经在为我们所有人快速发展打开新的视角和旅程。我真的迫不及待地想看看你创造了什么,我真诚地希望这本书能帮助你站立、奔跑。进入那里,创造新的宇宙,并请告诉我什么时候我可以访问它们。

目 录 Contents

译者序

前言

致谢

第1章 虚拟世界简介  1

1.1 我们虚拟化多久了  1

1.2 头戴式显示器诞生之前  2

1.3 头戴式显示器的诞生  2

1.4 消费者级VR的探索  4

1.5 家用电脑式虚拟现实  4

1.6 消费者级VR复出  5

1.7 VR的缺点  6

1.7.1 延迟  6

1.7.2 抖动和拖尾  6

1.7.3 纱窗效应  7

1.7.4 晕眩  7

1.7.5 期待哪些体验  7

1.7.6 消费者级VR:Rift CV1和HTC Vive  9

1.8 可以像内核一样进入电脑吗—VR面临的困难和挑战  10

1.8.1 运动追踪和运动捕获输入设备  10

1.8.2 触觉反馈  11

1.8.3 视觉追踪  11

1.8.4 空间和移动  12

1.8.5 虚拟现实内容制作  12

1.9 虚拟现实设计和发展  13

1.9.1 计划:任何计划皆可行  13

1.9.2 提前安排主要交互  14

1.9.3 真人测试  14

1.9.4 寻找合作与流程  14

《基于Unity与SteamVR构建虚拟世界》

1.9.5 真实性不是绝对的  14

1.10 本章小结  15

第2章 硬件初始化设置  16

2.1 配套硬件和软件需求  16

2.1.1 HTC Vive推荐规格  17

2.1.2 OSVR HDK推荐规格  17

2.1.3 Rift推荐规格  17

2.1.4 兼容性工具  18

2.1.5 处理兼容性工具结果  19

2.2 安装SteamVR  21

2.2.1 安装Steam客户端  21

2.2.2 注册Steam账户  21

2.2.3 安装SteamVR  21

2.3 安装提示  22

2.3.1 运动追踪器独立安放  22

2.3.2 整理物品腾出空间  22

2.3.3 避开墙体  23

2.3.4 什么是瞳孔间距及其重要性  23

2.4 安装VR硬件  24

2.4.1 HTC Vive安装介绍  24

2.4.2 OSVR HDK安装介绍  26

2.4.3 Rift安装  29

2.5 设置SteamVR  29

2.6 找到你的VR腿  31

2.7 舒适体验VR的几点建议  31

2.7.1 HTC Vive  31

2.7.2 OSVR  32

2.7.3 Rift  32

2.8 保持健康的VR体验  33

2.8.1 及时停止  33

2.8.2 休息一下  34

2.8.3 进食,饮水,快乐体验虚拟  35

2.8.4 体验VR时不要弄伤自己!小心测试  35

2.9 本章小结  36

第3章 创建SteamVR Unity项目  37

3.1 下载Unity并创建新项目  38

3.2 Unity编辑器教学  38

3.3 创建新的Unity项目  42

3.4 下载适用Unity的SteamVR库  42

3.5 VR视角的空间  46

3.5.1 创建Unity新场景  46

3.5.2 从示例文件中复制模型  47

3.5.3 添加新的游戏对象  47

3.5.4 将花园模型添加到场景中  48

3.5.5 添加房屋模型  49

3.5.6 设置VR摄像机装置  50

3.5.7 VR环境比例  52

3.5.8 调整花园模型比例  53

3.6 SteamVR摄像机定位和重新定位  54

3.7 项目保存和备份  54

3.8 本章小结  55

第4章 添加交互  56

4.1 添加交互框架  57

4.2 添加瞄准光标  57

4.2.1 添加一个UI画布  57

4.2.2 调整画布以适合VR场景  57

4.3 添加VREyeRaycaster和Reticle组件到摄像机  60

4.3.1 设置Inspector引用  61

4.3.2 防止光标剪切  62

4.4 在场景中添加门  62

4.5 使门可以交互  64

4.5.1 创建门控制脚本  64

4.5.2 脚本分解  66

4.6 门把手添加盒碰撞体  69

4.7 DoorController组件设置引用  70

4.8 保存工作  71

4.9 本章小结  71

第5章 构建头戴式显示器和游戏控制器用户界面  72

5.1 制作主菜单场景  72

5.1.1 打开示例项目  72

5.1.2 创建画布进行用户界面绘制  73

5.1.3 创建按钮  74

5.1.4 添加UI滑块显示按钮进度  75

5.2 编写C#按钮脚本  79

5.3 添加VR_BUTTON组件引用以使用  84

5.4 在按钮上添加文本标签以显示其作用  84

5.5 测试按钮  86

5.6 菜单场景中添加第二个按钮  86

5.6.1 复制按钮  86

5.6.2 更改文本标签  86

5.7 添加按钮的行为  86

5.7.1 添加Main Menu Controller游戏对象到场景中  86

5.7.2 编写主菜单脚本  87

5.7.3 事件函数添加到菜单按钮  88

5.8 添加场景设置  89

5.9 测试菜单  90

5.10 保存工作  90

5.11 本章小结  91

第6章 使用SteamVR传送系统在虚拟世界中移动  93

6.1 设置传送场景  93

6.1.1 为传送地面位置创建碰撞器  94

6.1.2 设置图层  97

6.1.3 设置摄像机装置并添加组件  97

6.2 编写C#脚本输入到传送器  98

6.3 修改SteamVR传送器代码  104

6.3.1 将DoClick()更改为公共函数  104

6.3.2 修改SteamVR传送器以使用LayerMask  104

6.4 设置摄像机游戏对象上的组件  104

6.5 可选的附加功能  106

6.6 本章小结  106

第7章 游戏中用头戴式显示器瞄准  107

7.1 摄像机附加炮弹发射系统  108

7.2 摄像机添加脚本用于获取玩家输入  109

7.2.1 编写SprayInputProvider.cs脚本  109

7.2.2 脚本分解  110

7.3 喷壶添加发射脚本  111

7.3.1 编写SprayShooter.cs脚本  111

7.3.2 脚本分解  112

7.4 在Inspector面板中设置组件  113

7.5 运行游戏  114

7.6 本章小结  114

第8章 利用音频充分实现虚拟现实  115

8.1 虚拟现实空间及其他  115

8.2 常用术语  115

8.2.1 环境音效  116

8.2.2 -  116

8.2.3 双耳音频  116

8.2.4 单音声  116

8.2.5 3D声  116

8.2.6 多普勒效应  117

8.3 音频源组件  117

8.4 为场景添加环境音效  118

8.5 为飞虫添加音效  121

8.6 为喷壶添加音效  122

8.7 为摄像机添加一个音频源  122

8.7.1 古怪且有趣  123

8.7.2 快节奏且激动人心  123

8.8 创建一个音频混音器  123

8.8.1 音频混音器窗口  123

8.8.2 在音频混音器窗口设置混音器  125

8.9 添加混音器组  125

8.10 设置音频源来使用音频混音器组  126

8.11 测试并混合音频  126

8.11.1 音频闪避  128

8.11.2 其他效果  129

8.12 保存项目  129

8.13 本章小结  129

第9章 HTC Vive移动控制器  130

9.1 如何与虚拟世界交互  130

9.2 HTC Vive控制器  130

9.2.1 尝试SteamVR交互系统示例场景  131

9.2.2 设计房间规模VR控制器技巧  131

9.3 在虚拟现实中利用Vive控制器拾取并放下  132

9.3.1 在Unity场景中添加Vive控制器  133

9.3.2 PickUp.cs脚本  134

9.3.3 脚本分解  136

9.3.4 添加触觉反馈  145

9.4 SteamVR交互系统实现用户界面  150

9.4.1 创建新项目并导入SteamVR  150

9.4.2 创建新场景并添加Player预设体  150

9.4.3 制作简单的UI画布与按钮  150

9.4.4 VR运行  153

9.5 利用Vive控制器实现虚拟世界的传送  153

9.5.1 创建新项目并导入SteamVR  153

9.5.2 创建新场景并添加一个Player预设体  153

9.5.3 测试  154

9.6 本章小结  154

第10章 手势输入系统  156

10.1 Leap Motion VR  156

10.1.1 Leap Motion VR安装套件  157

10.1.2 下载Leap Motion Orion驱动程序和软件  157

10.1.3 连接头戴式显示器测试Visualizer  158

10.1.4 下载Leap Motion Unity插件资源包  158

10.1.5 为交互引擎与Leap Motion设置Unity项目  158

10.1.6 在虚拟世界中实现  159

10.1.7 钢琴按键编程  160

10.1.8 潜在问题  164

10.2 Noitom感知神经元动作捕捉  164

10.2.1 下载和安装  165

10.2.2 运行示例项目  167

10.2.3 设置Unity项目  167

10.2.4 使用全身动作捕捉套装  171

10.2.5 潜在问题  172

10.3 本章小结  173

第11章 座式或静止的VR体验摄像机装置  174

11.1 VR驾驶简单的车辆  174

11.1.1 打开示例项目  174

11.1.2 代码设定坐或立校准  175

11.1.3 脚本分解  176

11.1.4 将车辆添加为摄像机的父对象  179

11.2 什么是第三人称以及虚拟现实是否适合第三人称视角  180

11.3 外部摄像机跟随车辆  180

11.3.1 打开示例项目  180

11.3.2 设置摄像机装置  180

11.3.3 添加一个摄像机脚本  181

11.3.4 保存  182

11.3.5 预览场景  182

11.4 本章小结  182

第12章 虚拟现实晕眩症  183

12.1 虚拟现实晕眩症是什么  184

12.1.1 个人体验  184

12.1.2 VR晕眩症状和征兆  184

12.2 是否可以解决  187

12.3 本章小结  188

第13章 Unity中减少VR晕眩症的实用技术  189

13.1 用UI覆盖来缩小视野  189

13.1.1 打开示例项目  190

13.1.2 视场蒙版  190

13.1.3 编写动态缩放脚本  190

13.1.4 运行示例  194

13.2 适用于VR的第三人称视角摄像机  195

13.2.1 打开并试行示例文件  195

13.2.2 编程  196

13.2.3 第三人称VR摄像机装置  199

13.3 假鼻子以及它如何闻味道  200

13.4 本章小结  202

第14章 改善与优化  203

14.1 定制SteamVR管理器  203

14.2 VR优化  206

14.2.1 渲染信息统计窗口  207

14.2.2 性能分析器  207

14.2.3 批量处理  213

14.2.4 遮挡  213

14.2.5 快速代码技巧  216

14.2.6 几何建模  218

14.3 本章小结  220

第15章 展望未来及写在最后的话  222

15.1 未来  222

15.1.1 无线头戴式显示器  222

15.1.2 背包式笔记本电脑  223

15.1.3 仓储级体验  223

15.1.4 视线追踪  223

15.1.5 光场VR  223

15.1.6 光像素VR  224

15.1.7 Khronos VR  224

15.2 结语  224

参考文 献  226。

unity 虚拟化

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C++远征篇汇总
下一篇:0x6 Java系列:Java NIO?看这一篇就够了!【二】
相关文章