本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正
从零构建Unity 3D游戏:开发与设计实战
本书介绍使用Unity设计和开发3D游戏的各方面知识,包括如何设计、创建和实现游戏角色、环境、UI、音效等。全书分为三部分:第一部分介绍基础知识,包括3D术语、安装Unity并创建项目的方法以及C#的相关知识;第二部分介绍3D角色的设计、游戏环境设计、游戏机制及项目交互、如何在任意项目上开发整体游戏界面等;第三部分从视觉效果、音效、游戏测试、渲染等维度对游戏进行打磨和细化,以提供更好的用户体验。本书配有丰富的随书资源,便于读者查找。
Unity3D高级编程:主程手记
本书分 10 章,每章都是一个独立的知识领域,读者可以按照章节顺序阅读本书,也可以根据喜好挑选自己感兴趣的章节学习。第 1 章讲了架构的意义、架构的原理以及如何实现架构。第 2 章对 C# 技术的基础知识做了详细的讲解。第 3 章主要针对客户端中的表格数据、程序的协作与应用进行讲解。第 4章介绍的是用户界面(UI)的工作原理与优化手段。第 5 章针对 3D 模型的原理、动画的原理以及两者的优化做了详细的讲解。第 6 章介绍的是网络层的业务与底层原理。第 7 章针对各种 AI 类型进行了解析。第 8 章主要介绍场景构建与优化、地图构建以及寻路算法优化的相关知识。第 9 章则给出了图形数学、图形学常用算法、渲染管线的相关知识。第 10 章针对客户端各类渲染技术的渲染原理进行了详细的解析。
Unity虚拟现实开发实战(原书第2版)
本书将带你进行一系列实战,并深入讨论如何使用Unity游戏引擎开发VR应用程序。本书通过基于项目的实践方法,帮助你快速了解使用Unity进行VR开发的具体细节。通过Oculus、Daydream和Vive等设备的体验,你将学习如何使用Unity开发VR应用程序。在众多主题和项目中,你将探索基于凝视与手柄控制器输入、世界坐标系UI画布、移动与远程传送、软件设计模式、360°多媒体、时间轴动画与多人网络。通过交互式Unity编辑器,你将了解Unity 3D游戏引擎,并且学习C#编程。
沉浸式3D体验设计
本书旨在帮助视觉设计从业人员进入飞速发展的3D建模和扩展现实(XR)设计领域,并给出了行之有效的方法和有效的设计思维过程,并以熟悉的设计原则为基础,探讨了如何在这些基础上进行构建沉浸式用户体验,使其适应虚拟和增强现实环境。本书首先介绍了XR和沉浸式3D体验设计的基础知识,以及它们是如何发展的;然后探索了核心概念和技术,包括人机交互、空间计算、投影映射和头戴式显示器。无论目标场景承载于移动端、云端还是可穿戴设备,设计师都可以借助本书中的相关技术完成目标设计。
从零构建Unity 3D游戏:开发与设计实战
Contents 目 录
前言
作者简介
第一部分 计划和设计
第1章 基础入门2
1.1 拥抱3D2
1.1.1 坐标系统2
1.1.2 矢量系统3
1.1.3 摄像机3
1.1.4 面、边、顶点和网格4
1.1.5 材质、纹理和着色器4
1.1.6 刚体物理6
1.1.7 碰撞检测6
1.2 Unity界面6
1.2.1 场景视图和层级结构7
1.2.2 检视器8
1.2.3 项目窗口9
1.2.4 游戏视图10
1.2.5 包管理器10
1.3 基本的Unity概念11
1.3.1 资源11
1.3.2 场景12
1.3.3 游戏对象12
1.3.4 组件12
1.3.5 脚本12
1.3.6 预制件13
1.3.7 包13
1.4 小结13
第2章 设计和原型制作14
2.1 游戏设计基础14
2.1.1 游戏设计文档14
2.1.2 深思熟虑后的决定15
2.1.3 迭代产品16
2.1.4 概念设计17
2.2 第一个Unity项目18
2.2.1 Unity Hub18
2.2.2 选择Unity版本19
2.2.3 选择模板19
2.2.4 程序化的渲染管线19
2.3 原型制作20
2.3.1 在线框图或纸上创作21
2.3.2 灰盒21
2.3.3 概念验证22
2.3.4 最小可用产品 22
2.3.5 垂直切片23
2.4 小结23
第3章 编程24
3.1 搭建环境24
3.2 基础知识26
3.2.1 变量27
3.2.2 数据类型27
3.2.3 程序逻辑29
3.2.4 方法33
3.3 小结35
第二部分 构建
第4章 游戏角色 38
4.1 设计和概念38
4.1.1 提问38
4.1.2 构思时间39
4.2 绑定41
4.2.1 动画——第一原则41
4.2.2 变形41
4.2.3 层级42
4.2.4 骨骼或关节43
4.2.5 正向动力学/反向动力学43
4.2.6 约束44
4.2.7 变形器44
4.2.8 控制45
4.2.9 基于物理的动画45
4.2.10 人体反向动力学系统45
4.2.11 动画46
4.3 角色控制器46
4.3.1 内置的角色控制器47
4.3.2 刚体角色控制器47
4.4 编写角色的动作脚本47
4.4.1 在Unity中初始化48
4.4.2 空闲动画52
4.4.3 代码入口53
4.4.4 RequireComponent属性53
4.4.5 更新代码54
4.4.6 方法56
4.5 小结57
第5章 绘制环境59
5.1 草图59
5.1.1 灵感板61
5.1.2 舞台设计62
5.2 涂盖63
5.2.1 Unity Terrain工具63
5.2.2 3D地形72
5.3 小结79
第6章 交互与玩法80
6.1 游戏循环80
6.2 机制工具箱82
6.2.1 资源管理82
6.2.2 风险与回报82
6.2.3 空间感知83
6.2.4 收集83
6.2.5 探索83
6.2.6 限制84
6.3 设计与实现84
6.4 我们的项目85
6.4.1 阶梯85
6.4.2 环形解谜90
6.4.3 狭小的空间97
6.4.4 交互体98
6.5 小结99
第7章 刚体和物理交互100
7.1 刚体组件100
7.1.1 质量101
7.1.2 阻力101
7.1.3 角阻力101
7.1.4 使用重力101
7.1.5 Is Kinematic选项102
7.1.6 插值102
7.1.7 碰撞检测103
7.1.8 约束104
7.1.9 信息块105
7.2 设计与实现105
7.3 心灵感应与物理交互105
7.3.1 岩石掉落106
7.3.2 破损的底座106
7.3.3 最终解谜107
7.4 小结115
第8章 用户界面和菜单116
8.1 用户界面117
8.1.1 叙事UI——叙事(是),
游戏内部(是)117
8.1.2 非叙事UI——叙事(否),
游戏内部(否)118
8.1.3 空间UI——叙事(否),
游戏内部(是)119
8.1.4 元UI——叙事(是),游戏
内部(否)119
8.2 UI元素120
8.2.1 主菜单120
8.2.2 仓库系统121
8.2.3 生命值的表示121
8.2.4 游戏物品交互系统121
8.3 项目中的UI 122
8.3.1 主菜单122
8.3.2 退出菜单123
8.3.3 空间提示框124
8.4 Unity UI124
8.4.1 Unity画布系统124
8.4.2 Unity UI对象130
8.4.3 实现134
8.5 小结138
第三部分 打磨和细化
第9章 视觉效果140
9.1 视觉效果概述140
9.2 Shader Graph141
9.2.1 安装142
9.2.2 创建142
9.2.3 Shader Graph接口143
9.2.4 常用的节点151
9.3 粒子系统155
9.3.1 Shuriken155
9.3.2 VFX Graph156
9.4 小结159
第10章 声音效果160
10.1 声音设计160
10.2 声音设计的五个元素161
10.2.1 声源161
10.2.2 包络162
10.2.3 音调163
10.2.4 频率163
10.2.5 分层164
10.3 可扩展的声音设计165
10.4 项目中的音效设计与实现166
10.4.1 播放第一个音效166
10.4.2 2D音效167
10.4.3 3D音效168
10.4.4 3D音效设置169
10.5 通过玩家交互触发声音174
10.6 小结177
第11章 构建与测试178
11.1 使用Unity构建游戏178
11.1.1 目标平台179
11.1.2 CPU架构179
11.1.3 服务器相关构建179
11.1.4 复制PDB文件180
11.1.5 创建Visual Studio解决方案180
11.1.6 开发构建180
11.1.7 自动连接探查器180
11.1.8 深度分析支持180
11.1.9 脚本调试180
11.1.10 只构建脚本181
11.1.11 压缩方法181
11.2 测试181
11.2.1 功能测试182
11.2.2 性能测试183
11.2.3 游戏测试187
11.2.4 浸泡测试188
11.2.5 本地化测试188
11.3 用户体验188
11.3.1 品牌推广188
11.3.2 设计188
11.3.3 可用性189
11.3.4 最初的问题189
11.3.5 第一个谜题189
11.3.6 引入次要机制190
11.3.7 最终解谜191
11.4 小结191
第12章 打磨192
12.1 概览192
12.2 敲定资源193
12.2.1 统一资源的风格193
12.2.2 细节法线194
12.2.3 清理隐藏面建筑196
12.2.4 纹理混合197
12.2.5 环境凌乱198
12.2.6 细节网格199
12.2.7 特效199
12.2.8 过场动画211
12.2.9 副动画212
12.3 光照212
12.3.1 3D形式212
12.3.2 提供灵感212
12.3.3 游戏玩法设计212
12.3.4 Unity光照213
12.4 声音的润色219
12.4.1 通过动画事件触发声音219
12.4.2 将用于声音的事件标记
在动画上221
12.5 小结225
第13章 其他Unity工具226
13.1 Unity游戏服务226
13.1.1 多人游戏工具226
13.1.2 XR插件228
13.1.3 机器学习代理228
13.1.4 Bolt可视化脚本229
13.2 小结230
Unity3D高级编程:主程手记
前 言
第1章 软件架构 1
1.1 架构的意义 1
1.2 软件架构的思维方式 5
1.3 如何构建Unity3D项目 9
第2章 C#技术要点 14
2.1 Unity3D中C#的底层原理 14
2.2 List底层源码剖析 17
2.3 Dictionary底层源码剖析 27
2.4 浮点数的精度问题 39
2.5 委托、事件、装箱、拆箱 44
2.5.1 委托与事件 44
2.5.2 装箱和拆箱 45
2.6 排序算法 48
2.6.1 快速排序算法 48
2.6.2 最大最小堆 50
2.6.3 其他排序算法概述 51
2.7 各类搜索算法 51
2.7.1 搜索算法概述 52
2.7.2 二分查找算法 52
2.7.3 二叉树、二叉查找树、平衡二叉树、红黑树和B树 52
2.7.4 四叉树搜索算法 53
2.7.5 八叉树搜索算法 54
2.8 业务逻辑优化技巧 54
2.8.1 使用List和Dictionary时提高效率 55
2.8.2 巧用struct 55
2.8.3 尽可能地使用对象池 57
2.8.4 字符串导致的性能问题 61
2.8.5 字符串的隐藏问题 64
2.8.6 程序运行原理 65
第3章 数据表与程序 68
3.1 数据表的种类 68
3.1.1 大部分数据都是在Excel里生成的 68
3.1.2 最原始的数据方式—代码数据 69
3.1.3 文本数据 69
3.1.4 比特流数据 70
3.2 数据表的制作方式 71
3.2.1 制作方式简介 71
3.2.2 让数据使用起来更加方便 72
3.3 多语言的实现 75
第4章 用户界面 78
4.1 用户界面系统的比较 78
4.2 UGUI系统的原理及其组件使用 79
4.2.1 UGUI系统的运行原理 79
4.2.2 UGUI系统的组件 80
4.3 UGUI事件模块剖析 82
4.3.1 UGUI事件系统源码剖析 82
4.3.2 输入事件源码 82
4.3.3 事件数据模块 83
4.3.4 输入事件捕获模块源码 84
4.3.5 射线碰撞检测模块源码 89
4.3.6 事件逻辑处理模块 91
4.4 UGUI核心源码剖析 91
4.4.1 UGUI核心源码结构 91
4.4.2 Culling模块 91
4.4.3 Layout模块 93
4.4.4 MaterialModif?iers、Specialized-Collections和Utility 94
4.4.5 VertexModif?iers 95
4.4.6 核心渲染类 96
4.5 快速构建一个简单易用的UI框架 101
4.6 UI优化 107
4.6.1 UI动静分离 108
4.6.2 拆分过重的UI 108
4.6.3 UI预加载 109
4.6.4 UI图集Alpha分离 110
4.6.5 UI字体拆分 111
4.6.6 Scroll View优化 112
4.6.7 网格重构的优化 113
4.6.8 UI展示与关闭的优化 114
4.6.9 对象池的运用 114
4.6.10 UI贴图设置的优化 115
4.6.11 内存泄漏 117
4.6.12 针对高低端机型的优化 123
4.6.13 UI图集拼接的优化 126
4.6.14 GC的优化 127
第5章 3D模型与动画 134
5.1 美术资源规范 134
5.2 合并3D模型 141
5.2.1 网格模型的基础知识 141
5.2.2 动态批处理 143
5.2.3 静态批处理 144
5.2.4 自己编写合并3D模型的程序 145
5.3 状态机 147
5.3.1 如何用状态机模拟人物行为动作 147
5.3.2 在游戏的人物行为动作中使用状态机 148
5.3.3 在游戏项目中使用状态机的地方 148
5.4 3D模型的变与换 152
5.4.1 切割模型 154
5.4.2 扭曲模型 156
5.4.3 简化模型 157
5.4.4 蒙皮骨骼动画 159
5.4.5 人物3D模型动画换皮换装 165
5.4.6 捏脸 167
5.4.7 动画优化 169
5.5 资源的加载与释放 176
第6章 网络通信 183
6.1 TCP与UDP 183
6.1.1 TCP和UDP简介 183
6.1.2 UDP的特点 185
6.1.3 是用TCP还是用UDP 186
6.2 C#实现TCP 187
6.2.1 程序实现TCP长连接 187
6.2.2 TCP的API库 187
6.2.3 线程锁 188
6.2.4 缓冲队列 188
6.2.5 双队列结构 190
6.2.6 发送数据 191
6.2.7 协议数据定义标准 192
6.2.8 断线检测 195
6.3 C#实现UDP 196
6.3.1 实现UDP 196
6.3.2 连接确认机制 196
6.3.3 数据包校验与重发机制 199
6.3.4 丢包问题分析 201
6.4 封装HTTP 202
6.4.1 HTTP协议原理 202
6.4.2 HTTP1.0、HTTP1.1、HTTP2.0简述 204
6.4.3 在Unity3D中的HTTP封装 206
6.4.4 多次请求时连续发送HTTP请求引起的问题 209
6.5 网络数据协议原理 222
6.5.1 协议包的格式 222
6.5.2 JSON 223
6.5.3 自定义二进制数据流协议格式 224
6.5.4 MessagePack 226
6.5.5 Protobuf 229
6.5.6 限定符的规则 231
6.5.7 Protobuf的原理:序列化和反序列化 232
6.5.8 Protobuf更改数据结构后的兼容问题 235
6.5.9 Protobuf的优点 236
6.5.10 Protobuf的不足 237
6.6 网络同步解决方案 237
6.6.1 状态同步法 237
6.6.2 实时广播同步法 239
6.6.3 帧同步 240
6.6.4 同步快进 242
6.6.5 精度问题 243
6.6.6 同步锁机制 244
第7章 游戏中的AI 245
7.1 用状态机构建AI 245
7.2 用行为树构建AI 251
7.2.1 复合节点 252
7.2.2 修饰节点 253
7.2.3 条件节点 253
7.2.4 行为节点 253
7.3 非典型性AI 255
7.3.1 可演算式AI 255
7.3.2 博弈式AI 257
第8章 地图与寻路 259
8.1 A星算法及其优化 259
8.1.1 长距离导航 262
8.1.2 A星排序算法优化 264
8.1.3 寻路期望值优化 265
8.1.4 通过权重引导寻路方向 267
8.1.5 拆分寻路区域 268
8.1.6 A星算法细节优化 270
8.1.7 寻路规则优化JPS 271
8.2 寻路网格的构建 275
8.2.1 数组构建网格 275
8.2.2 路点网格 277
8.2.3 平面三角形网格 279
8.2.4 多层级网格 282
8.2.5 三角形网格中的A星算法 283
8.2.6 体素化寻路网格 286
8.2.7 RecastNavigation Navmesh 288
8.3 地图编辑器 290
8.3.1 地图编辑器的基本功能 290
8.3.2 数据协议格式在编辑器中的选择 292
8.3.3 地图加载方式 293
8.3.4 地图九宫格 294
8.4 地图的制作与优化 296
8.4.1 地图的制作方式 296
8.4.2 常规场景的性能优化 299
第9章 渲染管线与图形学 306
9.1 图形学基础 306
9.1.1 向量的意义 307
9.1.2 点积的几何意义 307
9.1.3 叉乘的几何意义 308
9.1.4 向量之间的投影 309
9.1.5 矩阵的意义 310
9.1.6 矩阵旋转、缩放、投影、镜像和仿射 312
9.1.7 齐次坐标的平移矩阵 320
9.1.8 如何理解四元数 321
9.2 渲染管线 324
9.2.1 OpenGL、DirectX图形接口 324
9.2.2 渲染管线是什么 325
9.2.3 混合 337
9.2.4 渲染管线总结 341
第10章 渲染原理与知识 343
10.1 渲染顺序 343
10.2 Alpha Test 345
10.3 Early-Z GPU硬件优化技术 347
10.4 Mipmap的原理 348
10.5 显存的工作原理 350
10.6 Filter滤波方式 351
10.7 实时阴影是如何生成的 354
10.8 光照纹理烘焙原理 357
10.9 GPU Instancing的来龙去脉 362
10.10 着色器编译过程 369
10.11 Projector投影原理 372
Unity虚拟现实开发实战(原书第2版)
译者序
前言
审阅者简介
第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和的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
沉浸式3D体验设计
目 录Contents
推荐序
前 言
致 谢
第1章 融入现实 1
1.1 奇观背后的科技 1
1.2 扩展现实无处不在 6
1.2.1 十码距离 7
1.2.2 平视显示 7
1.2.3 仰望星空 8
1.2.4 先试后买 9
1.2.5 添加滤镜 9
1.2.6 虚拟体验 10
1.2.7 主动学习 12
1.2.8 量变到质变 12
1.3 知识分解 13
第2章 关键技术 15
2.1 扩展现实的发展历程 15
2.2 增强现实 19
2.2.1 功能整合 20
2.2.2 独立应用程序 20
2.2.3 WebAR 22
2.2.4 智能相机 23
2.2.5 陀螺仪和加速计 25
2.3 投影映射 26
2.4 头戴式显示器 29
2.4.1 选择你的现实 29
2.4.2 追踪方式 29
2.4.3 虚拟现实设备 30
2.4.4 增强现实与混合现实设备 31
2.5 摄影测量 32
设计挑战 36
第3章 沉浸式体验 37
3.1 3D世界 37
3.1.1 样条 40
3.1.2 网格 41
3.1.3 材质 42
3.1.4 视角 43
3.1.5 光源 44
3.1.6 场景 45
3.1.7 渲染 46
3.1.8 3D文件 47
3.2 示能设计 50
3.2.1 实体示能 51
3.2.2 感知示能 51
3.2.3 交互元素 52
3.3 多模态体验 53
3.3.1 视觉 54
3.3.2 听觉 55
3.3.3 嗅觉 55
3.3.4 触觉 56
3.3.5 本体感觉与动觉 58
3.3.6 多模态体验的重要性 58
3.3.7 利用多模态体验实现易用性 59
设计挑战 60
第4章 创意设计 61
4.1 找到设计源头 61
4.1.1 解决问题 62
4.1.2 功能优先形式 62
4.1.3 不再忘记别人的姓名 63
4.1.4 融合现实 65
4.2 创新和实用性 66
4.2.1 不必强求创新 67
4.2.2 周密设计 67
4.2.3 截止日期的力量 68
4.3 外部因素的影响 68
4.3.1 发散性思维 69
4.3.2 随机影响 70
4.3.3 聚合性思维 70
4.3.4 探索设计主题和模式 72
4.3.5 基于观察重新想象 72
4.4 保持设计的人性化 73
4.4.1 案例:谷歌眼镜 74
4.4.2 不必执着于完美 75
设计挑战 76
第5章 原型设计 78
5.1 保持乐观的心态 78
5.2 绘制透明草图 80
5.3 原型的力量 82
5.3.1 快速迭代 82
5.3.2 体验观察 84
5.3.3 展开想象 85
5.3.4 用户流程 88
5.4 熟能生巧 93
设计挑战 96
第6章 用户体验设计 97
6.1 友好的用户设计 97
6.1.1 问候方式 98
6.1.2 积极的用户体验 100
6.2 流畅的用户体验 109
6.3 了解目标受众 113
6.3.1 创建用户画像 113
6.3.2 使用用户画像进行体验观察 115
6.4 让现实触手可及 116
6.4.1 专注性 118
6.4.2 多模态 119
6.4.3 个性化 120
6.4.4 上下文 120
设计挑战 123
第7章 用户界面设计 124
7.1 z轴 124
7.2 3D界面隐喻 129
7.2.1 真实感 130
7.2.2 3D交互技术 132
7.2.3 虚拟现实中的界面隐喻 132
7.2.4 增强现实中的界面设计 133
7.3 时间和空间 135
7.4 微交互 137
设计挑战 140
第8章 人性化设计 141
8.1 保持设计的整体一致性 141
8.1.1 包装设计 143
8.1.2 产品设计新趋势:沉浸式
设计 144
8.1.3 整体共情 145
8.1.4 讲好故事 147
8.2 感知觉理论 148
8.2.1 视觉通路 149
8.2.2 格式塔理论 150
8.3 三维层次结构 153
8.3.1 位置设计 154
8.3.2 方向与旋转 155
8.3.3 视距 155
8.3.4 自适应距离 156
8.3.5 视觉冲突 156
8.3.6 元素关系 157
8.3.7 需求层次 158
设计挑战 159
第9章 动态变化的环境 161
9.1 应对变化 161
9.1.1 环境光 162
9.1.2 室外照度 163
9.1.3 室内照度 163
9.1.4 混合模式 164
9.1.5 用户自主权 166
9.2 图形背景关系 166
9.2.1 图形背景关系的类型 167
9.2.2 区分策略 168
9.2.3 建立联系 169
9.3 创建最佳视图 171
9.3.1 布局与组件 171
9.3.2 视角 171
9.3.3 焦距 172
9.3.4 运动视差 172
9.3.5 参照现实 173
9.4 唤起情绪 173
9.4.1 情感联系 174
9.4.2 多人体验 174
设计挑战 176
第10章 增强字体设计 177
10.1 可读性和易读性 177
10.1.1 显示设备的发展 178
10.1.2 回归基本原理 182
10.1.3 扩展现实专用字体 185
10.1.4 字体的可读性 186
10.2 视觉对比度 188
10.3 精细控制 193
10.3.1 字体位置 193
10.3.2 文本样式表 194
10.3.3 文本呈现方式 195
10.3.4 定制化设计 196
10.3.5 极简设计 197
设计挑战 198
第11章 色彩设计 200
11.1 颜色外观模型 200
11.1.1 加法混色 202
11.1.2 减法混色 202
11.1.3 线性空间与伽马校正 203
11.1.4 体验的可用性 204
11.2 光的相互作用 207
11.2.1 光源类型 208
11.2.2 光源颜色 209
11.2.3 照明设置 209
11.2.4 光照方向和距离 213
11.2.5 光线强度 213
11.2.6 阴影设计 213
11.3 动态适应 214
11.3.1 照明估计 215
11.3.2 环境反射 217
设计挑战 218
第12章 音效设计 219
12.1 视听同步 219
12.1.1 听觉产生的原理 221
12.1.2 音效的实现原理 222
12.1.3 扩展现实的音效应用 222
12.2 空间音效 223
12.2.1 定点音频录制 224
12.2.2 案例研究 225
12.3 增强音频 227
12.3.1 增强音频的工作原理 228
12.3.2 不止于说 229
12.3.3 如何购买音频眼镜 229
12.4 语音体验 230
12.4.1 无可替代 231
12.4.2 上下文语境 232
12.4.3 脚本设计 233
设计挑战 234
第13章 设计实践 236
13.1 开发程序 236
13.1.1 团队协作 237
13.1.2 3D Web框架 238
13.2 敏捷工作流程 240
13.2.1 敏捷模型与瀑布模型 240
13.2.2 Scrum方法 242
13.3 不断试错 244
13.4 用户体验测试 245
13.4.1 定性测试 246
13.4.2 定量测试 248
13.5 隐私保护 251
13.5.1 隐私分级 252
13.5.2 AR Cloud 253
13.5.3 面部识别 254
设计挑战 256
第14章 未来发展 257
14.1 发展方向 257
14.1.1 借助已知技术 258
14.1.2 为热爱创作 258
14.1.3 从周围世界汲取灵感 259
14.1.4 体验的触发因素 260
14.2 打破常规 262
14.2.1 扩展现实技术通用性的
提升 262
14.2.2 可穿戴技术的进步 265
14.2.3 简化发布与共享流程 266
14.3 扩展现实前景 267
14.3.1 宁静技术 267
14.3.2 未来可期 268
14.3.3 远程工作 269
14.4 扩展物理空间 269
参考文献 272