编辑推荐

  Unity向开发人员提供了多种工具,以实现具有虚拟现实特征的游戏体验。Unity的内建API以及特性可有效地实现多种可能性,并构建游戏场景和角色对象。无论开发何种游戏,理解并应用脚本特性可视为游戏设计的基本因素之一。《Unity脚本设计》将脚本技术划分为多个简单概念,进而有助于读者理解这一话题的基础内容。《Unity脚本设计》通过大量实例,详细分析所涉及的概念,并对核心概念予以实现。

内容简介

  《Unity脚本设计》详细阐述了与Unity脚本设计相关的基本解决方案,主要包括Unity中的C#语言,调试机制,单例模式、静态模式、GameObject以及场景世界,事件驱动程序设计,基于高级动画的Mecanim系统、相机、渲染和场景,与Mono协同工作,人工智能,与纹理、模型和2D元素协同工作,资源控制等内容。此外,《Unity脚本设计》还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。

  《Unity脚本设计》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。


目录

第1章Unity中的C#语言1

1.1为何选择C#语言1

1.2创建脚本文件2

1.3脚本的实例化操作4

1.4变量6

1.5条件语句7

1.5.1if语句8

1.5.2switch语句10

1.6数组13

1.7循环16

1.7.1foreach循环16

1.7.2for循环17

1.7.3while循环18

1.7.4无限循环20

1.8函数20

1.9事件23

1.10类和面向对象程序设计24

1.11类和继承机制26

1.12类和多态28

1.13C#属性32

1.14注释34

1.15变量的可见性37

1.16?操作符38

1.17SendMessage和BroadcastMessage38

1.18本章小结40

第2章调试机制41

2.1编译错误和控制台41

2.2利用Debug.Log进行调制——定制消息44

2.3覆写ToString方法46

2.4可视化调试50

2.5错误日志52

2.6编辑器调试56

2.7使用分析工具59

2.8基于MonoDevelop的调试62

2.9Watch窗口66

2.10恢复执行程序和步进操作70

2.11调用栈71

2.12Immediate窗口73

2.13设置条件断点74

2.14跟踪点76

2.15本章小结78

第3章单例模式、静态模式、GameObject以及场景世界79

第4章事件驱动程序设计102

4.1事件102

4.2事件管理106

4.2.1基于接口的事件管理107

4.2.2定义EventManager109

4.3MonoDevelop中的代码折叠——#region和#endregion114

4.3.1使用EventManager115

4.3.2基于委托机制的替代方案116

4.3.3MonoBehaviour事件121

4.3.4鼠标事件122

4.3.5应用程序焦点和暂停125

4.4本章小结127

第5章相机、渲染和场景128

5.1相机Gizmo128

5.2可见性131

5.2.1检测对象的可见性132

5.2.2关于对象可见性的其他问题133

5.2.3视锥体测试——渲染器134

5.2.4视锥体测试——点135

5.2.5视锥体测试——遮挡136

5.2.6相机前、后视觉137

5.3正交相机138

5.4相机渲染和后处理142

5.5相机震动148

5.6相机和动画150

5.7相机和曲线152

5.8本章小结158

第6章与Mono协同工作159

6.1表和集合160

6.1.1List类160

6.1.2Dictionary类163

6.1.3Stack类164

6.2IEnumerable和IEnumerator接口166

6.3字符串和正则表达式172

6.3.1null、空字符串和空格172

6.3.2字符串比较173

6.3.3字符串的格式化174

6.3.4字符串循环175

6.3.5创建字符串176

6.3.6搜索字符串176

6.3.7正则表达式176

6.4无穷参数178

6.5语言集成查询178

6.6Linq和正则表达式181

6.7与文本数据资源协同工作182

6.8从本地文件中加载文本数据184

6.8.1从INI文件中加载文本数据185

6.8.2从CVS文件中加载文本数据187

6.8.3从Web中加载文本数据187

6.9本章小结188

第7章人工智能189

7.1游戏中的人工智能189

7.2开始项目191

7.3烘焙导航网格192

7.4NPC主体对象195

7.5Mecanim中的有限状态机198

7.6C#语言中的有限状态机202

7.7构建Idle状态204

7.8构建Patrol状态207

7.9构建Chase状态211

7.10构建Attack状态213

7.11构建Seek-Health(或逃跑)状态214

7.12本章小结217

第8章定制Unity编辑器219

第9章与纹理、模型和2D元素协同工作247

第10章资源控制和其他276

精彩书摘

  第1章Unity中的C#语言

  《Unity脚本设计》阐述Unity的脚本设计,因而读者需要了解Unity游戏开发环境下的C#语言。在进一步阅读之前,读者有必要明晰相关概念,进而可在理论基础上掌握脚本设计这一高级内容,此类内容多具有衔接性和实践性特征。关于衔接性,任何一种程序设计语言均会强调语法及其编程规则,这也是一种语言的正式内容之一,其中涉及变量、循环以及函数。随着程序员经验的不断增加,其关注点逐渐从语言本身转向对实际问题的处理,即由语言自身内容转向特定环境下的语言应用。因此,《Unity脚本设计》并非是一本C#语法书籍。

  在结束本章的学习后,相信读者已经掌握了C#语言的基本内容,后续章节将运用C#语言处理相关案例以及实际问题,这也是《Unity脚本设计》的特点之一,并覆盖了C#语言的全部功能项,以使读者更好地理解相关操作结果。无论经验如何,这里建议读者逐章阅读,对于期望解决复杂问题的C#语言新手而言尤其如此。对于经验丰富的开发人员,《Unity脚本设计》则可强化其现有的知识,并在学习过程中提供新的建议和理念。本章将采用循序渐进的方式,从头开始阐述C#语言的基础内容。另外,如果读者熟悉另一门语言的编程知识,且尚未接触过C#语言,现在则是学习该语言的良好时机。

  1.1为何选择C#语言

  当提及Unity脚本设计时,面临的一个问题则是选取哪一种语言,Unity对此提供了解决方案。相应地,官方选取方案则是C#和JavaScript语言。然而,考虑到基于Unity的特定应用,JavaScript应称作JavaScript或是UnityScript尚存争论,但其中原因并非是《Unity脚本设计》讨论的重点。当前问题是项目所选取的设计语言。作为一种方案,可在项目中选择两种语言,同时在其中分别编写脚本文件,并对这两种语言进行混合。当然,这在技术上是可行的,Unity对此并未加以限制,但这会导致混淆以及编译冲突,就像尝试同时以英里和千米为单位计算距离。

  因此,这里建议采用一种语言,并在项目中作为主语言加以使用。《Unity脚本设计》则选用了C#语言,其原因在于:首先C#语言并非优于其他语言,根据个人观点,此处并不存在绝对意义上的优劣性,每种语言均包含各自的优点和应用场合;同时,所有Unity语言均可用于游戏制作。这里选择C#语言的主要因素在于其应用的广泛性,以及对Unity的支持。针对Unity,C#语言可最大限度地与开发人员现有的知识体系结构相结合。大多数Unity教程均采用C#语言编写,同时也常见于其他应用开发领域中。C#语言的历史可追溯至.NET框架,后者也可用于Unity中(称作Mono)。另外,C#语言也借鉴了C++语言的内容。在游戏开发中,C++则是一类主要的开发语言。通过学习C#程序设计语言,读者可向当今游戏界的Unity程序开发人员看齐。因此,《Unity脚本设计》选用了C#语言,进而扩大其应用范围,在现有教程以及资源的基础上,最大限度地发挥读者的知识水平。

  ……

前言/序言

  前言

  针对Unity中基于C#语言的游戏脚本设计,《Unity脚本设计》简明、扼要地阐述了这一主题。当今市场上充斥着大量Unity的入门书籍和教程,但鲜少以专业、结构化的方式探讨这一相对高级的话题。《Unity脚本设计》假设读者已经熟悉了Unity的基本内容,例如数据资源的导入、关卡设计、光照贴图以及C#或JavaScript语言中的脚本机制,通过大量的实例讲述脚本机制与复杂任务间的应用方式,其中包含了调试方法、人工智能、定制渲染、编辑器扩展动画和运动行为等。《Unity脚本设计》的主要目的并非是叙述抽象的原理,以及理论级的操作提示。相反,《Unity脚本设计》展示了理论与真实实例之间的实践方法,以帮助读者强化编程技术,进而构建优化的游戏作品。这里,也建议读者采用概括和抽象相结合的思维方式逐章阅读《Unity脚本设计》内容。具体而言,可将每章内容视为特定的实例,以及通用原理的具体描述。最后,读者可脱离《Unity脚本设计》的应用环境,并在实际应用中满足具体的需求条件。简而言之,读者不应拘泥于特定示例以及书中提供的学习用例,而是将相关知识运用于自己的开发项目中。



其他推荐