阅读(1618) (0)

Unity 3D 完全自学教程(博文视点出品)

2021-05-18 22:44:07 更新

Unity 3D 完全自学教程(博文视点出品)

马遥 陈虹松 林凡超 著

  • 出版社: 电子工业出版社
  • ISBN:9787121355158
  • 版次:1
  • 商品编码:12507443
  • 品牌:博文视点
  • 包装:平装
  • 开本:16开
  • 出版时间:2019-03-01
  • 用纸:胶版纸
  • 页数:384
  • 字数:630000
  • 正文语种:中文

点此购买


编辑推荐

适读人群 :本书适用于广大Unity 初学者入门学习,也适合用户查阅和参考具体系统的使用方法、注意事项等,所以也可以作为一本Unity的参考手册使用。

Unity引擎已经进入了成熟期并一直保持平稳而持续的更新,但是官方资料和文档的更新并不是很及时,还迟迟没有中文文档,对于学习者来说形成了一个不大不小的困难。同时网络上的视频教程、图文教程的知识呈碎片化,难以形成体系,导致学习者在一些重要的细节上不知其所以然。

本书的作者均是多年置身于游戏开发一线的开发者,有着丰富的游戏开发实践经验,且部分作者有丰富的游戏开发教学经验,本书是他们总结经验、持续学习的成果,适合初学Unity,又具有比较完整的知识体系。本书既可以作为初学者的入门书籍,又可以作为进阶者的查阅材料。

内容简介

Unity 作为一个成熟的游戏引擎,其设计和使用都是有层次的。本书共 13 章,第 1 章至第 3 章为基础知识部分,主要介绍 Unity 的基本操作、基本概念、编写脚本的方法、导入和使用资源的方法,学完这部分内容后,你已经可以做出很多有趣的小游戏了。第 4 章至第 11 章主要介绍 Unity 重要的系统模块、功能,包括物理系统、UI 界面系统、动画系统、3D 数学基础、场景管理、导航系统、着色器系统、打包与发布等,读完以后可以掌握高级的开发技术并解决实际问题。第 12 章和第 13 章是两个有代表性的 Unity游戏示例,一个是 3D 跑酷游戏,另一个是 2D 的弹球游戏,综合展示了 Unity 的大部分功能,具有较强的代表性。除了这些内容,每章都会有一些小的示例,以方便大家实践并理解具体概念。由于实例部分的内容操作流程较多,不易用图文展现,本书还特别附赠了视频教程来方便读者学习。

本书适合广大 Unity 初学者入门时使用,也适合 Unity 用户查阅和参考软件具体的使用方法、注意事项等,所以也可以作为一本 Unity 的参考手册使用。

作者简介

马遥:

从高中时代就开始制作“文曲星”游戏,就此踏入游戏开发的世界。曾在像素软件公司开发大型网络游戏《寻仙》,创业时期曾主持开发多款手游和HTML 5游戏。后期专注于高性能游戏服务器的设计。平时喜欢研究动态语言和算法,擅长讲解复杂的算法和概念。Practical Game AI Programming 译者。目前专业从事游戏开发教育,教授Unity引擎的使用,希望带领更多人走进游戏开发的世界。

陈虹松:

拥有多年一线游戏开发工作经验,对Gameplay设计与实现的相关内容有着深入的理解,特别是动作游戏与回合制游戏。擅长分析游戏开发中的疑难问题。工作中的“填坑侠”,团队中的“万事屋”。参与项目有《次元召唤师》,《悠唐天下》等。希望把Unity理论与实践中的关键问题总结出来,让新手少走弯路,老手也能作为参考。

林凡超:

拥有8年游戏行业研发经验,项目曾获得全球iOS Feature推荐。客户端与服务器兼修,擅长游戏框架设计。曾在龙渊网络、酷咔数字、维京游戏等多家著名游戏公司担任主程职位,对于行业发展及项目研发有较为深入的了解。擅长UE与Unity 3D等主流引擎,对多种游戏类型均有深度研究,参与过《兰空VOEZ》、《雾霾之下》、《禽兽三国》等项目。

目录

第 1 章 初识 Unity / 1

1.1 下载与安装 / 1

1.1.1 下载 Unity 安装程序 / 1

1.1.2 安装 Unity / 2

1.1.3 多版本并存 / 2

1.2 初次运行 / 2

1.2.1 工程页面 / 2

1.2.2 学习资料页面 /3

1.2.3 新建工程 / 3

1.2.4 打开工程 / 3

1.3 工程窗口 / 4

1.3.1 基本功能 / 5

1.3.2 搜索功能 / 5

1.3.3 搜索资源商店 / 6

1.3.4 快捷键 / 7

1.4 场景视图窗口 / 8

1.4.1 浏览场景 / 8

1.4.2 场景辅助线框 / 8

1.4.3 修改物体的位置 /10

1.4.4 场景视图工具条 /14

1.5 辅助线框菜单 / 16

1.5.1 辅助线框 / 16

1.5.2 辅助图标 / 17

1.5.3 显示网格 / 18

1.5.4 选中时高亮和选中框线 /18

1.5.5 内置组件的显示 /19

1.6 层级窗口 / 19

1.6.1 父子关系 / 19

1.6.2 将物体设置为子物体 20

1.6.3 同时编辑多个场景 /. 20

1.7 检视窗口 / 20

1.7.1 检视物体和选项 /.21

1.7.2 添加、删除组件 /.21

1.7.3 复制组件或组件参数 22

1.7.4 查看脚本参数 /.22

1.7.5 查看素材 /23

1.7.6 工程设置 /24

1.7.7 修改组件的顺序 /24

1.8 工具栏 /25

1.9 游戏视图窗口 /25

1.9.1 播放和暂停 /26

1.9.2 游戏视图的工具条 /26

1.9.3 自定义 Unity 的开发环境 /27

1.10 Unity 的常用快捷键 /29

1.11 动手搭建游戏场景/31

1.12 2D 与 3D 工程的区别 /36

1.13 总结 /37

第 2 章 开始 Unity 游戏开发 / 39

2.1 场景 /39

2.1.1 场景的概念 /39

2.1.2 保存场景 /40

2.1.3 打开场景 /40

2.2 游戏物体 /40

2.3 组件 /41

2.3.1 变换组件 /41

2.3.2 其他组件 /42

2.4 使用组件 /42

2.4.1 添加组件 /43

2.4.2 编辑组件 /44

2.4.3 组件选项菜单 /45

2.4.4 测试组件参数 /45

2.5 最基本的组件 — 变换组件 /46

2.5.1 属性列表 /46

2.5.2 编辑变换组件 /46

2.5.3 父子关系 /47

2.5.4 非等比缩放的问题 /47

2.5.5 关于缩放和物体大小的问题/48

2.5.6 变换组件的其他注意事项 / 48

2.6 脚本与组件操作 /49

2.6.1 创建和使用脚本 /49

2.6.2 初识脚本 / 49

2.6.3 用脚本控制游戏物体 /50

2.6.4 变量与检视窗口 /51

2.6.5 通过组件控制游戏物体 /52

2.6.6 访问其他游戏物体 /53

2.6.7 常用的事件函数 /55

2.6.8 时间和帧率 / 56

2.6.9 创建和销毁物体 /57

2.6.10 使游戏物体或组件无效化 /58

2.6.11 父物体无效化 / 58

2.7 脚本组件的生命期 /58

2.8 标签 /61

2.8.1 为物体设置标签 /61

2.8.2 创建新的标签 /62

2.8.3 小提示 / 62

2.9 静态物体 / 62

2.10 层级 /63

2.10.1 新建层级 / 63

2.10.2 为物体指定层级 /64

2.10.3 仅渲染场景的一部分 /64

2.10.4 选择性的射线检测 /65

2.11 预制体 / 66

2.11.1 使用预制体 / 66

2.11.2 通过游戏物体实例修改预制体 /67

2.11.3 在运行时实例化预制体 /67

2.12 保存工程的注意事项 / 71

2.12.1 保存当前场景 / 71

2.12.2 保存工程 / 72

2.12.3 不需要保存的改动 /73

2.13 输入 /74

2.13.1 传统输入设备与虚拟输入轴 /74

2.13.2 移动设备的输入 /77

2.13.3 VR 输入概览 / 81

2.14 方向与旋转的表示方法 / 81

2.14.1 欧拉角 / 81

2.14.2 四元数 /82

2.14.3 直接使用四元数 /83

2.14.4 在动画中表示旋转 /84

2.15 灯光 /85

2.15.1 渲染路径 /85

2.15.2 灯光的种类 /86

2.15.3 灯光设置详解 /89

2.15.4 使用灯光 /90

2.16 摄像机 /91

2.16.1 属性介绍 /91

2.16.2 细节 /93

2.16.3 渲染路径 /93

2.16.4 清除标记 /93

2.16.5 剪切面 /95

2.16.6 剔除遮罩 /96

2.16.7 视图矩形 /96

2.16.8 正交摄像机 /96

2.16.9 渲染贴图 /96

2.16.10 显示目标 /97

2.16.11 其他提示 /97

2.17 开始做游戏吧 /97

第 3 章 资源工作流程 / 98

3.1 内置的基础物体/98

3.1.1 立方体 /98

3.1.2 球体 /99

3.1.3 胶囊体 /99

3.1.4 柱体 /99

3.1.5 平面 /100

3.1.6 四边形 / 100

3.2 资源导入 / 101

3.3 资源导入设置 / 103

3.4 导入图片资源的设置 / 103

3.4.1 图片资源的导入方式 /103

3.4.2 图片纹理的类型 /104

3.5 模型资源的导入流程 /110

3.5.1 导入人形动画 / 111

3.5.2 导入非人形动画 / 113

3.5.3 模型资源导入设置 /115

3.6 声音资源的导入设置 / 137

3.7 从资源商店导入资源 / 137

3.7.1 进入资源商店和选购 /137

3.7.2 下载的资源文件的存储位置 /138

3.8 资源包 / 139

3.8.1 导入包 / 139

3.8.2 导出包 / 140

3.8.3 导出更新包 / 141

3.9 标准资源 / 142

第 4 章 物理 /143

4.1 简介 /143

4.2 概述基本概念 /143

4.2.1 刚体 /143

4.2.2 休眠 /144

4.2.3 碰撞体 / 144

4.2.4 物理材质 / 145

4.2.5 触发器 / 145

4.2.6 碰撞与脚本行为 /145

4.2.7 对碰撞体按照处理方式分类 /145

4.2.8 碰撞事件触发表 /.146

4.2.9 物理关节 / 147

4.2.10 角色控制器 / 147

4.3 刚体 /148

4.3.1 属性介绍 / 148

4.3.2 父子关系 / 149

4.3.3 脚本问题 / 149

4.3.4 刚体和动画 / 149

4.3.5 刚体和碰撞体 /150

4.3.6 组合碰撞体 / 150

4.3.7 连续碰撞检测 / 150

4.3.8 比例和单位的重要性 / 151

4.3.9 其他问题 / 152

4.4 盒子碰撞体 / 152

4.5 胶囊碰撞体 / 152

4.6 网格碰撞体 / 153

4.6.1 属性 /153

4.6.2 限制条件和解决方法 / 154

4.6.3 其他问题 / 155

4.7 球体碰撞体 / 155

4.8 地形碰撞体 / 156

4.9 物理材质 / 156

4.10 固定关节 / 157

4.11 铰链关节 / 158

4.12 弹簧关节 / 160

4.13 角色控制器 / 161

4.13.1 属性 / 161

4.13.2 详细说明 / 162

4.13.3 调整参数的技巧 / 162

4.13.4 防止角色被卡住 / 162

4.13.5 小技巧 / 163

4.14 常量力 / 163

4.14.1 属性 / 163

4.14.2 小技巧 / 163

4.15 车轮碰撞体 / 163

4.15.1 属性 / 164

4.15.2 详细说明 / 164

4.15.3 具体的设置方法 /165

4.15.4 碰撞体的外形问题 /165

4.15.5 车轮阻尼曲线 /165

4.15.6 小技巧 / 166

4.16 车辆创建入门 / 166

4.16.1 创建车辆的基本框架 / 166

4.16.2 可控制的车辆 / 167

4.16.3 车轮的外观 /168

4.17 物理系统的实践 / 169

4.17.1 不倒翁的制作 / 169

4.17.2 锁链的制作 /173

4.18 物理系统可视化调试/ 177

第 5 章 UI 界面 /181

5.1 UI 组件 /181

5.1.1 渲染组件 / 181

5.1.2 布局组件 / 183

5.1.3 显示组件 / 185

5.1.4 交互组件 / 187

5.1.5 事件功能 / 196

5.2 UI 进阶 /201

5.2.1 图集 /201

5.2.2 图片格式 / 202

5.2.3 渲染顺序 / 202

5.2.4 实现圆盘转动的效果 /204

第 6 章 动画 /210

6.1 基础概念 / 210

6.1.1 什么是帧 / 210

6.1.2 模型动画与非模型动画 /210

6.1.3 动画混合的核心 — 插值与权重 /211

6.2 Mecanim 动画系统 / 211

6.2.1 动画系统的工作流 /211

6.2.2 动画剪辑 / 213

6.3 动画控制器 / 223

6.3.1 动画状态机 / 223

6.3.2 动画层级 / 228

6.3.3 动画混合树 / 228

6.4 使用人形角色动画 /.231

6.4.1 人形骨架映射 / 231

6.4.2 人形动画身体遮罩 /234

6.4.3 人形动画的重定向 /235

6.4.4 逆向运动学 / 237

6.5 实践:实现一个带有动画且操作流畅的角色控制器 /238

6.5.1 创建工程 / 238

6.5.2 模型下载 / 239

6.5.3 创建动画状态机 /239

6.5.4 配置动画状态机 / 241

6.5.5 代码控制 / 243

第 7 章 游戏开发的数学基础 / 245

7.1 坐标系 / 245

7.1.1 左手坐标系、右手坐标系 /245

7.1.2 世界坐标系 / 246

7.1.3 局部坐标系 / 246

7.1.4 屏幕坐标系 / 247

7.2 向量 /248

7.2.1 向量的加法 / 248

7.2.2 向量的减法 / 248

7.2.3 点乘 /248

7.2.4 叉乘 / 249

7.2.5 Vector3 结构体 /249

7.2.6 位置与向量的区别和联系 /250

7.2.7 Vector3 的用法 /251

7.3 矩阵 /252

7.4 齐次坐标 / 253

7.5 四元数 / 253

7.5.1 概念 /253

7.5.2 结构体的简介 /254

7.5.3 四元数的操作示例 /255

7.6 本章小结 / 258

第 8 章 场景管理 / 259

8.1 多场景编辑 / 259

8.1.1 在编辑器中打开多个场景 /259

8.1.2 场景分隔栏菜单 /260

8.1.3 多场景烘焙光照贴图 /261

8.1.4 多场景烘焙寻路网格 /261

8.1.5 多场景烘焙遮挡剔除信息 /261

8.1.6 多场景运行游戏 /262

8.1.7 场景相关设置 /262

8.1.8 注意事项 / 262

8.2 运行时的场景管理 / 263

8.2.1 场景管理类 / 263

8.2.2 运行时切换场景 /263

8.2.3 切换场景时不销毁游戏物体 /265

8.2.4 异步加载场景 /266

第 9 章 导航系统 / 268

9.1 概述 /268

9.2 导航系统内部的工作机制 / 269

9.2.1 可行走区域 / 269

9.2.2 寻路算法 / 269

9.2.3 具体路径 / 270

9.2.4 避开障碍 / 270

9.2.5 让代理移动 / 270

9.2.6 全局导航与局部导航 /270

9.2.7 障碍的两个例子 / 271

9.2.8 链接关系 / 271

9.3 导航系统的构建组件 / 271

9.3.1 导航代理组件 / 271

9.3.2 导航障碍物 / 273

9.3.3 网格链接组件 /274

9.4 构建导航网格 /275

9.5 创建导航代理 /277

9.6 创建导航障碍物 /278

9.7 创建网格链接 /279

9.8 自动构建网格链接 /280

9.9 建立高度网格 / 281

9.10 导航区域和移动成本 / 282

9.10.1 寻路成本 / 283

9.10.2 区域类型 / 283

9.10.3 区域掩码 / 284

9.11 新版导航系统组件 / 284

9.11.1 导航网格表面组件 /284

9.11.2 导航网格修正组件 /286

9.11.3 导航修正区域组件 /287

9.11.4 导航网格链接组件 /287

9.11.5 构建导航网格的 API /289

9.12 与其他组件一起使用的问题 /291

9.12.1 导航代理组件与物理组件混用 /291

9.12.2 导航网格组件与动画组件混用 /291

第 10 章 着色器 / 293

10.1 Unity 着色器的简介 / 293

10.2 编写表面着色器/ 293

10.2.1 简介 / 294

10.2.2 预处理指令 /295

10.2.3 表面着色器的输入结构体 / 297

10.3 ShaderLab 简介 /297

10.3.1 语法 / 298

10.3.2 属性 / 298

10.3.3 子着色器与回滚 /298

10.3.4 例子 /298

10.4 材质、着色器、贴图的关系 /299

10.5 表面着色器的实例 / 300

10.5.1 从最简单的例子开始 /300

10.5.2 贴图 / 301

10.5.3 法线贴图 / 302

10.5.4 边缘发光 / 303

10.5.5 细节贴图 / 304

10.5.6 屏幕空间中的细节贴图 /305

10.5.7 立方体反射 / 306

10.5.8 世界空间切片 /307

10.5.9 修改顶点的位置 /308

10.5.10 逐顶点的数据处理 /309

10.5.11 调整最终颜色 / 310

10.5.12 雾 / 311

10.5.13 总结 / 312

第 11 章 打包与发布 / 313

11.1 打包设置 / 313

11.2 发布设置菜单 /313

11.3 发布为桌面程序/ 314

11.4 发布时的内部流程/ 314

11.5 发布为安卓应用程序/.315

11.5.1 JDK 概述 / 315

11.5.2 JDK 的下载、安装 /315

11.5.3 配置环境变量 /316

11.5.4 SDK 概述 /317

11.5.5 下载安卓 SDK / 317

11.5.6 导出设置 / 319

第 12 章 示例教程——跑酷游戏 / 323

12.1 准备工具 / 323

12.2 分析需求 / 323

12.3 控制人物动作 /323

12.4 生成地图 / 324

12.4.1 创建地图模板 /324

12.4.2 设置地图生成规则 /325

12.4.3 使地图运动 /326

12.4.4 生成道具 / 329

12.4.5 复杂地形 / 330

12.5 控制人物 / 333

12.5.1 分析人物动作 / 333

12.5.2 添加角色控制器 /333

12.5.3 向前移动 / 333

12.5.4 左右移动 / 334

12.5.5 左转与右转 /334

12.5.6 跳跃与下滑 /334

12.5.7 播放道路动画 /335

12.6 游戏音效 / 336

12.6.1 背景音效 / 336

12.6.2 道具音效 / 336

12.7 显示得分 / 337

12.8 触摸控制 / 338

12.8.1 向量的点乘 /338

12.8.2 代码实现 / 339

第 13 章 示例教程——2D 物理弹球 /343

13.1 游戏玩法 / 343

13.2 分析需求 / 345

13.3 搭建场景 / 345

13.3.1 砌墙(限定小球的活动区域)/345

13.3.2 创建枪口(用于初始化小球的发射位置)/346

13.3.3 显示分数 / 347

13.3.4 创建小球 / 347

13.3.5 创建道具预制件 /347

13.3.6 创建几何图形 /352

13.3.7 创建关卡 / 353

13.3.8 发射 / 359

13.3.9 小球寻路 / 362

13.3.10 菜单面板 / 364

13.3.11 总结 / 366

前言/序言

Unity 引擎已经流行了很多年,时至今日,可以说已经进入了成熟期。进入了成熟期的 Unity一直在保持平稳而持续的更新节奏,但是官方资料和文档的更新并不是很及时,特别是对广大国内游戏开发者来说,官方迟迟没有推出中文文档,这对学习 Unity 来说就形成了不大不小的阻碍。

除官方资料外,目前市面上也有大量 Unity 的相关书籍和学习资料。但现在新手学习 Unity的最常见途径是通过视频,这种新的学习方法值得推广,笔者自己也做过一些免费的视频教程。

不过,视频教程、图文教程有一个很大的弊端,那就是知识碎片化、难以形成体系,这导致学习者在一些重要的细节上不知其所以然。笔者认为学习时间可以碎片化,但知识体系是不能碎片化的。

本书的几位作者在阅读 Unity 官方文档时曾受到过很大的启发,官方文档中的一些原理和注意事项对我们的帮助尤其大。例如,在介绍动画系统、物理引擎的相关概念,以及场景拆解合并的内容中,都包含了很多极其有用却容易被忽略的信息。我们在游戏开发工作中对引擎的一些错误使用,其实都源于我们对引擎理解得不完整,而这些问题在官方文档中都已经有过提示和讲解。

一直以来,我们都渴望将这些帮助过我们的、精华的知识分享给所有开发者。这次电子工业出版社给了我们一个难得的机会,让我们可以编写一本适合 Unity 初学者的具有比较完整的知识体系的书籍,所以我们满怀热情地开始了这本书的编写工作。本书既可以作为初学者的入门书籍,又可以作为进阶者查阅知识点的资料。

专为Unity初学者量身打造

本书面向 Unity 的初学者,无论是对 Unity 一无所知的初学者,还是有一定基础、想要了解更多知识的 Unity 用户,都可以从书中轻松获取需要的内容。

图书结构科学合理

凭借深入细致的市场调查和研究,我们针对 Unity 初学者的特点和需求,精心安排了适合的学习结构,通过将知识点和实例相结合帮助读者轻松、快速地学习。

学练结合,理论联系实际

本书以实用为宗旨,大量知识点都力求贴近实战,并提供了众多精彩且颇具实用价值的综合实例,希望能帮助读者轻而易举地理解重点和难点,并有效地提高动手能力。

配有精彩、超值的教学视频

本书附赠配套教学视频,让读者学习知识更加轻松自如!

本书在编写过程中遇到了很多困难,但最终在“皮皮关”的老师们的通力合作之下顺利完成。在此特别感谢本书的组织者杨奕,吴江川、黎大林、伍书培、沈琰也为本书贡献了部分内容。最后还要感谢电子工业出版社的孔祥飞老师,没有他的敦促与细心审校,本书肯定难以完成。

由于编者水平有限,书中的错误和疏漏在所难免,如有任何意见和建议,请读者不吝指正,感激不尽。


点此购买