内容简介
Unity 作为世界上使用最广泛的游戏引擎之一,为游戏开发者提供了一套易于使用和功能强大的游戏开发工具。本书分为3部分:第 1部分(第 1、2章)介绍Unity的基本概念;第2部分(第3~6章)探讨C# 脚本与Unity内置模块的协同工作,内容涉及UI、动画、物理系统、使用音频和视频资源等;第3 部分(第7 ~11 章)研究Unity 高级脚本编程,包括Unity中计算机图形学的数学原理、可编程渲染管线、面向数据的技术堆栈、序列化系统和资源管理,以及Unity 与MicrosoftGameDev、Azure、PlayFab 协同工作的问题。
本书面向具有中级.NET 和C# 编程经验,并有兴趣学习使用Unity 进行游戏开发的开发者。
目录
第1部分 Unity的基本概念
第1章
初识Unity
1.1 技术要求2
1.2 开始使用Unity编辑器3
1.2.1 选择合适的Unity版本3
1.2.2 选择合适的订阅计划4
1.2.3 下载和安装Unity编辑器4
1.2.4 探索Unity编辑器12
1.3 在Unity中使用不同的功能24
1.3.1 什么是游戏引擎24
1.3.2 Unity的功能25
1.4 Unity中的.NET/C#和脚本26
1.4.1 Unity中的.NET配置文件26
1.4.2 Unity的脚本后端27
1.5 使用Visual Studio构建Unity游戏29
1.6 本章小结32
第2章
Unity中的脚本概念
2.1 技术要求33
2.2 理解Unity中脚本的概念33
2.2.1 游戏对象-组件架构33
2.2.2 Unity中的常见类34
2.2.3 Unity中的预制件39
2.2.4 Unity中的特殊文件夹44
2.3 脚本对象的生命周期44
2.3.1 初始化45
2.3.2 更新47
2.3.3 渲染48
2.4 创建脚本并用作组件51
2.4.1 如何在Unity中创建脚本51
2.4.2 将脚本作为组件附加到场景中的
游戏对象上54
2.4.3 访问附加到游戏对象的组件57
2.5 Unity Package Manager和包60
2.5.1 Unity Package Manager60
2.5.2 包63
2.6 本章小结65
第2部分 C#脚本与Unity内置模块的协同工作
第3章
使用Unity UI系统开发UI
3.1 Unity中的C#脚本和通用UI组件68
3.1.1 Canvas组件69
3.1.2 Image组件80
3.1.3 Text组件84
3.1.4 可选UI组件88
3.2 Unity中的C#脚本和UI事件系统90
3.2.1 输入模块91
3.2.2 新的Input System包92
3.3 MVVM模式和UI93
3.4 提高UI的性能99
3.4.1 Unity Profiler99
3.4.2 多个Canvas对象100
3.4.3 使用Sprite Atlas100
3.5 本章小结102
第4章
使用Unity动画系统创建动画
4.1 技术要求103
4.2 Unity动画系统中的概念104
4.2.1 动画剪辑104
4.2.2 动画控制器109
4.2.3 Avatar112
4.2.4 Animator组件116
4.3 在Unity中实现3D动画117
4.3.1 导入动画资源117
4.3.2 配置动画控制器120
4.4 在Unity中实现2D动画124
4.5 提高Unity动画系统的性能127
4.5.1 Unity Profiler工具127
4.5.2 Animator窗口的Culling Mode
属性130
4.5.3 Anim.Compression130
4.6 本章小结131
第5章
使用Unity物理系统
5.1 技术要求132
5.2 Unity物理系统中的概念132
5.2.1 Collider(碰撞体)133
5.2.2 Rigidbody(刚体)137
5.2.3 Trigger(触发器)141
5.3 使用物理系统编写脚本141
5.3.1 Collider的方法141
5.3.2 Trigger的方法143
5.3.3 Rigidbody的方法144
5.4 制作一个基于物理系统的简单游戏147
5.5 提高物理系统的性能158
5.5.1 Unity Profiler158
5.5.2 增加固定时间间隔159
5.5.3 减少不必要的分层碰撞检测160
5.6 本章小结160
第6章
在Unity项目中集成音频和视频
6.1 技术要求161
6.2 Unity音频系统和视频系统中的概念161
6.2.1 Audio Clip(音频剪辑)161
6.2.2 Audio Source(音频源)165
6.2.3 Audio Listener(音频监听器)167
6.2.4 Video Clip(视频剪辑)168
6.2.5 Video Player(视频播放器)171
6.3 使用音频和视频编写脚本174
6.3.1 AudioSource.Play175
6.3.2 AudioSource.Pause176
6.3.3 AudioSource.Stop178
6.3.4 VideoPlayer.Clip178
6.3.5 VideoPlayer.url180
6.3.6 VideoPlayer.Play181
6.3.7 VideoPlayer.frame和VideoPlayer.
frameCount182
6.4 使用Unity开发Web应用程序的
注意事项184
6.4.1 URL184
6.4.2 帧率187
6.5 提高音频系统的性能187
6.5.1 Unity Profiler187
6.5.2 使用Force To Mono来节省内存189
6.6 本章小结190
第3部分 Unity高级脚本编程
第7章
理解Unity中计算机图形学的数学原理
7.1 从使用坐标系开始194
7.1.1 理解左手坐标系和右手坐标系195
7.1.2 局部空间196
7.1.3 世界空间198
7.1.4 屏幕空间200
7.2 使用向量202
7.2.1 向量相加203
7.2.2 向
前言/序言
作为世界上使用最广泛的游戏引擎之一,Unity提供了易于使用和功能强大的游戏开发工具,这吸引了许多开发者选择Unity进行游戏开发。然而,现代游戏开发所需的工具并不局限于游戏引擎,其他工具和服务(如云计算)也越来越多地用于游戏开发。本书将探讨如何使用Unity游戏引擎、Microsoft Game Dev、Azure和PlayFab服务来创建
游戏。
本书从理解Unity游戏引擎的基本原理开始,逐渐进入Unity编辑器和用C#编写Unity脚本的关键概念,为制作游戏做好准备。然后,将学习如何使用Unity的内置模块,如UI系统、动画系统、物理系统,以及如何将音频和视频集成到游戏中,以使游戏更加有趣。随着内容的深入,将进入一些高级主题,如计算机图形学涉及的数学原理,如何使用可编程渲染管线和在Unity中创建后期处理效果,如何使用Unity的C# Job System来实现多线程,以及如何使用Unity的实体组件系统(Entity Component System,ECS)以面向数据的方式编写游戏逻辑代码来提高游戏性能。在此过程中,读者还将了解Microsoft Game Dev、Azure、PlayFab,并通过使用Unity PlayFab SDK访问Azure PlayFab API来从云中保存和加载数据。通过阅读本书,读者将更加熟悉Unity游戏引擎,对Azure有更深入的理解并做好自己开发游戏的准备。
本书面向的读者
这本书面向有中级.NET和C#编程经验,并有兴趣学习使用Unity进行游戏开发的开发者。
内容架构
本书分为3部分,共11章,具体内容如下。
第1部分(第1、2章)介绍Unity的基本概念。
第1章解释Unity游戏引擎的基本原理。从Unity安装过程开始,探索Unity编辑器,了解.NET配置文件和Unity的脚本后端,从而对Unity有一个广泛的理解。
第2章是第1章的延续,详细介绍Unity中的脚本。首先介绍Unity脚本中的常见类;然后解释脚本实例的生命周期;接着介绍如何在Unity中创建脚本,并将脚本作为组件附加到游戏对象中;最后演示如何通过Unity Package Manager来添加或删除包。
第2部分(第3~6章)讲解C#脚本与Unity内置模块的协同工作。
第3章涵盖Unity中常用的不同类型的UI组件,讨论如何通过使用模型-视图-视图模型(Model View View Model,MVVM)模式在Unity中开发UI,探讨一些优化Unity UI的技巧。
第4章涵盖Unity动画系统的最重要的概念,如动画剪辑、动画控制器、Avatar和Animator组件。本章将使用动画系统来实现3D动画和2D动画,并探讨一些优化Unity动画系统的技巧。
第5章概述Unity提供的物理解决方案,包括两个内置的物理解决方案:NVIDIA PhysX引擎和Box2D引擎;涵盖Unity物理系统的关键概念,如Collider和Rigidbody;还将实现一个基于物理系统的乒乓球游戏,并探讨一些优化Unity物理系统的技巧。
第6章涵盖Unity音频系统和视频系统中的关键概念,如Audio Clip、Audio Source、Audio Listener和Video Player,并探索一些优化Unity音频系统的技巧。
第3部分(第7~11章)探讨Unity高级脚本编程。
第7章涵盖与计算机图形学相关的数学原理,如坐标系、向量、矩阵和四元数。
第8章首先概述3个在Unity中可选择的现成的渲染管线,即早期的内置渲染管线和两个基于可编程渲染管线的预制渲染管线,即通用渲染管线和高清渲染管线;然后介绍如何使用通用渲染管线资源来配置渲染管线,以及如何使用Volume框架将后期处理效果应用到游戏中;最后探讨一些优化通用渲染管线的技巧。
第9章介绍什么是面向数据的设计,以及面向数据的设计与传统的面向对象的设计之间的区别。还探讨了Unity中面向数据的技术堆栈 (Data-Oriented Technology Stack,DOTS) ,以及组成它的三个技术模块,即C# Job System、 ECS和Burst编译器。
第10章讨论Unity中的YAML序列化、二进制序列化和JSON序列化,涵盖Unity中的资源工作流程,还探讨如何在Azure中创建Azure Blob存储服务,并将来自Azure的可寻址内容加载到Unity项目中。
第11章讨论什么是Microsoft Game Dev、Azure和PlayFab,以及为什么应该考虑在游戏开发中使用它们。本章将通过Azure PlayFab API在Unity项目中实现注册、登录和排行榜功能。
本书的翻译工作由唐山师范学院的姬婧、郑铮共同完成,其中第1部分(1、2章)和第3部分(7~11章)由姬婧翻译,第2部分(3~6章)由郑铮翻译。
由于译者水平有限,书中难免存在不足和疏漏之处,敬请广大读者批评指正。
如何充分利用这本书
本书假设读者对.NET和C#有一定了解。本书涵盖Unity游戏引擎的基本概念、高级主题,以及其他技术,如微软的Azure和PlayFab。
读者需要在本地计算机上安装长期支持(LTS)版本的Unity,推荐使用Unity 2020或更高版本,可以在第1章中找到安装Unity的步骤。所有的代码示例都在Windows操作系统上使用Unity 2020.3.24进行了测试,这些代码也应该可以适用于