书籍作者:约瑟夫·霍金 | ISBN:9787302638254 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:9713 |
创建日期:2024-04-29 | 发布日期:2024-04-29 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
编写游戏能获得较丰厚的回报并且充满乐趣——使用Unity,很容易上手编写游戏!Unity会为我们处理繁重的工作,所以你可以专注于游戏玩法、图像和用户体验。C#的支持和一个庞大的预构建组件生态系统甚至可以帮助开发新手快速从绘图板转向屏幕。
《Unity实战(第3版)》介绍如何使用Unity游戏平台创建游戏。其中包含的许多2D、3D和AR/VR游戏示例能让你亲身体验Unity的工作流程和最先进的渲染引擎。《Unity实战(第3版)》已完全更新,介绍了Unity的XR工具包,展示了如何开始构建VR和AR应用。
● 创建跑、跳、撞东西的角色
● 用AI编写敌人脚本
● 播放音乐和空间感知音效
● 将游戏部署到桌面、手机和网页上
Joseph Hocking 是一位专门从事交互式媒体开发的软件工程师。他目前在高通公司工作,在BUNDLAR 工作时编写了本书第3 版的大部分内容,在Synapse Games 工作时编写了本书的第1 版。他还曾在伊利诺伊大学芝加哥分校、芝加哥艺术学
院和芝加哥哥伦比亚学院授课。他与妻子和两个孩子住在芝加哥郊区。更多信息可以访问他的个人网站(见链接[1])。
虽然我从事游戏编写工作已很长时间了,但最近才开始使用Unity。当我开始开发游戏时,Unity 尚未出现,它的第1 版在2005 年发布。从一开始,它就承诺要作为游戏开发工具,但直到发布了几个版本,它也没有实现诺言。iOS 和Android 等平台(统称为“移动”平台)是后来才出现的,这些平台在很大程度上促成了Unity 日益突出的地位。
最初,我将Unity 视为一个有趣的开发工具,我关注它,但并不真正使用它。那段时间,我在为桌面计算机、网站编写游戏,为各种客户端开发项目。我使用过Blitz3D和Flash 等工具,它们很适合编程,但有诸多限制。随着这些工具开始过时,我一直在寻找更好的游戏开发方法。
我从Unity 3 开始体验,后来在Synapse Games 的开发工作中就完全转向了Unity。最初是为Synapse 开发网页游戏,最终转向了移动游戏。然后,我们进入游戏开发的完整生命周期,因为Unity 使我们能够从同一个代码库部署到网页和移动平台!
我一直认为分享知识很重要,讲授游戏开发课程也有好几年了。这么做的主要原因是很多导师和老师的言传身教对我的影响(顺便说一句,我的老师Randy Pausch 是如此鼓舞人心,他在2008 年去世前不久发表了名为The Last Lecture 公开演讲)。我曾在多所学校授课,而我一直以来都想写一本关于游戏开发的书。
本书的许多方面都是我第一次学习Unity 时所期望获得的学习内容。Unity 的众多优点之一是有大量有价值的学习资源,但这些资源比较零散(诸如脚本参考或独立的教程),需要读者进行深度挖掘才能找到需要的内容。最好有一本书,能把需要了解的所有内容都放在一起,以清晰、合乎逻辑的方式呈现出来,这就是本书的目标。本书的读者对象是对Unity 很陌生的编程老手,以及游戏开发新手。书中选取的项目则反映了我通过快速连续地完成各种自由项目获得技能和信心的经验。
学习使用Unity 开发游戏是一次激动人心的冒险。对我来说,学习如何开发游戏意味着要忍受很多麻烦;但对读者而言,拥有了本书则意味着拥有了一份清晰简明的学习资源。
关 于 本 书
本书适用对象
本书介绍如何使用Unity 编写游戏。有经验的程序员可以把它当成Unity 的入门书籍。本书的目标十分明确:带领有一些编程经验但没有Unity 经验的读者使用Unity开发游戏。
讲授开发最好的方式是完成示例项目,学生通过制作示例来学习,这正是本书采用的方式。本书的各个主题展现为构建游戏示例的步骤,当浏览本书时,鼓励读者在Unity 中构建这些游戏。不同于其他书籍,本书每几章便挑选不同的项目来讲解,而不是整本书只开发一个项目。其他有些书籍采用“一个完整项目”的方法进行讲解,
不足之处是如果对前面的章节不感兴趣,就很难跳到中间的章节。
本书比大多数Unity 书籍(特别是入门书籍)都更加注重严格的编程内容。Unity 通常被描述成不需要编程的功能集合,这是一个错误的观点,它无法让人们明白制作一款商业游戏都需要学会哪些知识。如果不知道如何编写计算机程序,最好先使用“免费互动编码”网站(详见链接[1])之类的资源进行学习,学习完编程后再回来看本书。
不必担心具体的编程语言,本书通篇使用了C#,但其他编程语言的技能也可以派上用场。本书的第Ⅰ部分会占用一定篇幅介绍新的概念,并仔细地引导读者在Unity中开发第一款游戏,但剩下的章节将更快地推进,让读者了解多种游戏类型的项目。
本书最后会描述如何将游戏部署到各种平台(如Web 和移动平台),但本书的重点不会涉及最终的部署目标,因为Unity 与平台无关。
至于游戏开发的其他方面,艺术学科的广泛覆盖会减少本书专业方面的介绍,而涉及更多的Unity 外部软件(例如,所使用的动画软件)。所以关于美术任务的讨论将仅限于Unity 或所有游戏开发者都应知道的方面(请注意,附录C 是关于自定义对象建模的)。
学习路线图
第1 章 介绍跨平台的游戏开发环境——Unity。你将学习Unity 中所有对象所基于的组件系统,以及如何编写和运行基本脚本。
第2 章 演示在3D 中编写移动示例的步骤,涵盖鼠标和键盘输入等主题。全面解释3D 位置和旋转的定义和管理。
第3 章 将移动示例转变为第一人称射击游戏,讲解射线投射和基础AI。射线投射(向场景投射一条线,并观察相交情况)是所有类型游戏中很有用的操作。
第4 章 涵盖了美术资源的导入和创建。本章不关注代码,因为每个项目都需要(基本)模型和贴图。
第5 章 学习如何在Unity 中创建2D 益智游戏。尽管Unity 开始时仅包括3D 图形,但现在也能很好地支持2D 图形。
第6 章 用平台游戏机制扩展2D 游戏。特别是,实现玩家的控制、物理和动画。
第7 章 介绍Unity 中最新的GUI 功能。每个游戏都需要UI,而最新版本的Unity为创建UI 提供了一个改进的系统。
第8 章 展示如何在3D 中创建另一种移动游戏,此时从第三人称的视角看到场景。实现第三人称控制将展示一系列3D 数学操作,学习如何使用带动画的角色。
第9 章 浏览如何在游戏中实现交互设备和物品。玩家有很多方式操作这些设备,包括直接触摸它们,接触游戏中的触发器,或者是按下控制器的某个按钮。
第10 章 涵盖了如何与互联网通信。学习如何使用标准互联网技术来发送和接收消息。例如HTTP 请求,从服务器获取XML 或JSON 数据。
第11 章 介绍如何编写音频功能。Unity 对短音效和长音轨提供了很好的支持,这两种类型的音频对于所有电子游戏都很重要。
第12 章 将不同章节的碎片整合到一个游戏中。此外,你还将学习如何编程实现“点击”控制,以及如何保存玩家的进度。
第13 章 构建最终应用并发布到多个平台,如桌面、网页和移动,甚至VR。总之,Unity 使你能够为每个主流的游戏平台创建游戏。
本书最后还提供了4 个附录,分别介绍场景导航、外部工具、Blender 和学习资源。
关于代码和链接
本书的所有源代码,不管是代码清单或是片段,都使用等宽字体,以便与周围的文本区别开来。在大多数代码清单中,代码都通过注释指出关键概念,而编号有时用于在文本中提供关于代码的额外信息。代码是经过格式化的,通过合理地增加换行和缩进,以适应本书可用的页面空间。
学习本书唯一需要的软件是Unity,本书使用的是Unity 2020.3.12,它是编写本书时的最新版本。某些章节偶尔讨论其他软件,但那些仅作为可选的额外部分,而非核心的学习内容。
警告 Unity 项目会记住它们是在哪个版本的Unity 中创建的,如果尝试在不同版本的Unity 中打开它们,会显示警告。如果打开本书下载的示例时看到警告,请单击Continue 按钮并忽略它。
本书的代码清单通常展示了在已有的代码文件中应该添加或修改的内容,除非是首次出现的代码文件,否则不要用后来的清单覆盖整个文件。尽管可以下载书中引用的完整示例项目,但最好手动输入代码清单中的内容,并观察所引用的示例。可从GitHub(见链接[2])下载书中的示例,也可扫描本书封底的二维码获取本书的示例文件。
在此要说明的是,读者在阅读本书时会看到一些有关链接的编号,形式是数字编码加方括号,例如,[1]表示读者可扫描封底二维码下载Links 文件,在其中可找到章节中的[1]所指向的链接。
第Ⅰ部分 起步
第1 章 初识Unity.3
1.1 为什么Unity 如此优秀4
1.1.1 Unity 的优势4
1.1.2 要意识到的缺点6
1.1.3 使用Unity 构建的游戏示例7
1.2 如何使用Unity10
1.2.1 Scene 视图、Game 视图和工具栏12
1.2.2 使用鼠标和键盘.14
1.2.3 Hierarchy 视图和Inspector面板14
1.2.4 Project 和Console 标签.15
1.3 开始使用Unity 编程16
1.3.1 在Unity 中运行代码:脚本组件16
1.3.2 使用附带的IDE:Visual Studio.18
1.3.3 打印到Console 视图:Hello World!19
1.4 小结21
第2 章 构建一个令人置身3D 空间的演示游戏.23
2.1 在开始之前24
2.1.1 对项目做计划24
2.1.2 了解3D 坐标空间.25
2.2 开始项目:在场景中放置对象 27
2.2.1 布景:地面、外墙和内墙 27
2.2.2 光源和摄像机. 29
2.2.3 玩家的碰撞器和视点. 31
2.3 移动对象:应用变换的脚本 32
2.3.1 图示说明如何通过编程实现移动 32
2.3.2 编程实现图中演示的运动 32
2.3.3 理解局部和全局坐标空间 34
2.4 用于观察周围情况的脚本组件:MouseLook. 35
2.4.1 跟踪鼠标移动的水平旋转 37
2.4.2 有限制的垂直旋转 38
2.4.3 同时进行水平和垂直旋转 40
2.5 键盘输入组件:第一人称控制 42
2.5.1 响应按键. 43
2.5.2 设置独立于计算机运行速度的移动速率 44
2.5.3 移动CharacterController以检测碰撞 44
2.5.4 将组件调整为走路而不是飞翔46
2.6 小结48
第3 章 在3D 游戏中添加敌人和子弹.49
3.1 通过射线投射射击50
3.1.1 什么是射线投射.50
3.1.2 使用ScreenPointToRay命令射击.51
3.1.3 为瞄准点和击中点添加可视化指示器53
3.2 编写反应性目标脚本.56
3.2.1 确定被击中的对象56
3.2.2 警告目标被击中.57
3.3 漫游AI 基础58
3.3.1 图解基础AI 的工作原理.58
3.3.2 使用射线投射发现障碍物59
3.3.3 跟踪角色的状态.61
3.4 生成敌人预制体62
3.4.1 什么是预制体63
3.4.2 创建敌人预制体.63
3.4.3 在不可见的Scene Controller 中实例化.64
3.5 通过实例化对象进行射击.67
3.5.1 创建子弹预制体.67
3.5.2 发射子弹并和目标碰撞69
3.5.3 伤害玩家.71
3.6 小结72
第4 章 为游戏开发图形.73
4.1 了解美术资源.73
4.2 构建基础3D 场景:白盒76
4.2.1 白盒的解释76
4.2.2 为关卡绘制平面图 77
4.2.3 根据平面图布局几何体 77
4.3 使用2D 图像为场景贴图. 79
4.3.1 选择文件格式. 80
4.3.2 导入图像文件. 81
4.3.3 应用图像. 83
4.4 使用贴图图像产生天空视觉效果 84
4.4.1 什么是天空盒. 84
4.4.2 新建天空盒材质 85
4.5 使用自定义3D 模型 87
4.5.1 选择文件格式. 88
4.5.2 导出和导入模型 89
4.6 使用粒子系统创建效果 91
4.6.1 调整默认效果的参数. 92
4.6.2 为火焰应用新贴图 94
4.6.3 将粒子效果附加到3D对象上 95
4.7 小结 96
第Ⅱ部分 轻松工作
第5 章 使用Unity 的2D 功能构建一款记忆力游戏.99
5.1 设置2D 图形100
5.1.1 为项目做准备100
5.1.2 显示2D 图像(sprite).103
5.1.3 将摄像机切换为2D模式.104
5.2 构建卡片对象并使它响应单击106
5.2.1 用sprite 构建对象.106
5.2.2 鼠标输入代码107
5.2.3 当单击时显示卡片正面.107
5.3 显示不同的卡片图像. 108
5.3.1 通过编程加载图像 109
5.3.2 通过不可见的Scene
Controller 设置图像. 110
5.3.3 实例化卡片的网格 112
5.3.4 打乱卡片. 113
5.4 实现匹配并为匹配评分 114
5.4.1 保存并比较翻开的卡片 115
5.4.2 隐藏不匹配的卡片 116
5.4.3 分数的文本显示. 117
5.5 重启按钮 119
5.5.1 使用SendMessage编写UIButton 组件. 119
5.5.2 从SceneController 中调用LoadScene 121
5.6 小结 122
第6 章 创建基本的2D 平台游戏 123
6.1 设置图形 124
6.1.1 放置墙壁和地面. 124
6.1.2 导入sprite sheet 125
6.2 左右移动玩家. 126
6.2.1 编写键盘控制 127
6.2.2 与墙壁碰撞 128
6.3 播放sprite 动画. 129
6.3.1 讲解Mecanim 动画系统 129
6.3.2 在代码中触发动画的播放 131
6.4 添加跳跃功能. 132
6.4.1 因重力而下落 132
6.4.2 实现向上跃动 133
6.4.3 检测地面. 134
6.5 平台游戏的附加功能. 135
6.5.1 不同寻常的地面:斜坡和单向平台.136
6.5.2 实现移动的平台.137
6.5.3 摄像机控制140
6.6 小结141
第7 章 在游戏中放置GUI143
7.1 在开始写代码之前.144
7.1.1 立即模式GUI 还是高级2D 界面144
7.1.2 规划布局146
7.1.3 导入UI 图像.146
7.2 设置GUI 显示147
7.2.1 为界面创建画布.147
7.2.2 按钮、图像和文本标签.148
7.2.3 控制UI 元素的位置.151
7.3 编程实现UI 中的交互153
7.3.1 编程实现不可见的UIController154
7.3.2 创建弹出窗口155
7.3.3 使用滑动条和输入字段设置值159
7.4 通过响应事件更新游戏161
7.4.1 集成事件系统162
7.4.2 从场景中广播和监听事件.162
7.4.3 从HUD 广播和监听事件.163
7.5 小结165
第8 章 创建第三人称3D 游戏:玩家移动和动画.167
8.1 将摄像机视图调整为第三人称视角169
8.1.1 导入用于观察的角色. 170
8.1.2 将阴影添加到场景 171
8.1.3 围绕玩家角色旋转摄像机 172
8.2 编程控制摄像机的相对移动 175
8.2.1 旋转角色以面向移动方向 176
8.2.2 朝某方向前进 178
8.3 实现跳跃动作. 179
8.3.1 应用垂直速度和加速度 180
8.3.2 修改地面检测来处理边缘和斜坡 181
8.4 设置玩家角色上的动画 185
8.4.1 在导入的模型上定义动画剪辑 187
8.4.2 创建动画控制器. 188
8.4.3 编写操作Animator 组件的代码 192
8.5 小结 193