Unity 3D脚本编程——使用C#语言开发跨平台游戏
  • 推荐0
  • 收藏12
  • 浏览3.9K

Unity 3D脚本编程——使用C#语言开发跨平台游戏

陈嘉栋 (作者) 

  • 书  号:978-7-121-29718-2
  • 出版日期:2016-09-14
  • 页  数:404
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:付睿
本书以Unity 3D的跨平台基础Mono以及其游戏脚本语言C#为基础进行讲解。全面系统地剖析了Unity 3D的跨平台原理以及游戏脚本开发的特点。第1章主要介绍了Unity 3D引擎的历史以及编辑器的基本知识;第2章主要介绍了Mono,以及Unity 3D利用Mono实现跨平台的原理,并且分析了C#语言为何更加适合Unity 3D游戏开发;第3章到第10章主要介绍了Unity 3D游戏脚本语言C#在使用Unity 3D开发过程中的知识点,包括Unity 3D脚本的类型基础、数据结构、在Unity 3D脚本中使用泛型、使用委托和事件打造自己的消息系统、利用定制特性来拓展Unity 3D的编辑器、Unity 3D协程背后的秘密——迭代器以及可空类型和序列化在Unity 3D中使用的相关知识;第11章到第14章,则主要介绍了Unity 3D的资源管理以及优化和编译的内容。
本书以Unity 3D的跨平台基础Mono以及其游戏脚本语言C#为基础进行讲解。
推荐序
Unity 3D 是由两个具有巨大吸引力而极其令人愉悦的领域混合而成的——C#语言和游戏开发。Unity 团队设计Unity 3D 将这两者有机地结合起来。
对于C#语言的喜爱要回溯至2000 年,当时微软向世界推出了新的语言C#,不仅震惊了
Windows 领域,它同时也震惊了开源世界。GNOME 项目的领导者Meguel de Icaza 就看到了C#语言在桌面开发的前景,着手创建了开源的.NET 跨平台实现Mono,如今Mono 已经用于从嵌入式系统到服务器、工业控制、移动开发和游戏的所有方面。.NET 语言不仅确保了我们不再受限于某一种当下的语言,而且确保了我们可以继续重用之前使用C 和C++编写的现有代码,C#使我们和我们所处的世界更加高效。随着微软成立.NET 基金会,大力发展开源跨平台的.NET,同时Unity 公司也是.NET 基金会成员,我们有理由相信使用C#的Unity 3D 平台也会发展得更好。
正如Unity Technologies 的CEO David Helgason 先生所说:“Unity 是一个用来构建游戏的工具箱,它整合了图像、音频、物理引擎、人机交互以及网络等技术。”Unity 3D 因为它的快速开发以及跨平台能力而为人所知。Unity 3D 的快速开发和跨平台能力正是来自于它对Mono平台和C#语言的依赖,使用C/C++来编写高性能要求的引擎代码,针对开发人员采用高级的C#、UnityScript、Boo 语言作为游戏开发的脚本。
本书作者陈嘉栋带着激情投身于Unity 游戏开发,他在Unity 社区也非常活跃,他也通过博客写了大量和Unity 3D 相关的文章,如今他将这些在社区上的贡献汇集成这样一个涉及Unity 3D 跨平台原理分析、Unity 3D 和Mono 的结合,以及在游戏脚本编程中使用C#语言的作品。希望无论是初次接触Unity 3D 脚本编程的新人,还是有一定经验的老手都能对Unity 3D 了解得更全面深刻,对C#语言在开发游戏脚本过程中的知识点掌握得更牢固,写出更高效的代码。
使用C#和Unity 3D 构建游戏是一件极佳的事情。你能够使用一种强类型的、类型安全的、垃圾回收的、具有最热门API 的语言来开发游戏,下面开始学习陈嘉栋创作的这本佳作吧!
微软MVP 张善友
2016.7.13 书于 深圳

目录

第1 章 Hello Unity 3D .............................................................................................................. 1
1.1 Unity 3D 游戏引擎进化史 ................................................................................................ 1
1.2 Unity 3D 编辑器初印象 .................................................................................................... 5
1.2.1 Project 视图 ............................................................................................................................ 5
1.2.2 Inspector 视图......................................................................................................................... 8
1.2.3 Hierarchy 视图 ....................................................................................................................... 9
1.2.4 Game 视图 ............................................................................................................................ 10
1.2.5 Scene 视图 ............................................................................................................................ 12
1.2.6 绘图模式 .............................................................................................................................. 14
1.2.7 渲染模式 .............................................................................................................................. 16
1.2.8 场景视图控制 ...................................................................................................................... 17
1.2.9 Effects 菜单和Gizmos 菜单 ................................................................................................ 18
1.3 Unity 3D 的组成 .............................................................................................................. 18
1.4 为何需要游戏脚本 ......................................................................................................... 20
1.5 本章总结 ......................................................................................................................... 21
第2 章 Mono 所搭建的脚本核心基础 ..................................................................................... 22
2.1 Mono 是什么 ................................................................................................................... 22
2.1.1 Mono 的组成 ........................................................................................................................ 22
2.1.2 Mono 运行时 ........................................................................................................................ 23
2.2 Mono 如何扮演脚本的角色 ........................................................................................... 24
2.2.1 Mono 和脚本 ........................................................................................................................ 24
2.2.2 Mono 运行时的嵌入 ............................................................................................................ 26
2.3 Unity 3D 为何能跨平台?聊聊CIL .............................................................................. 38
2.3.1 Unity 3D 为何能跨平台 ....................................................................................................... 38
2.3.2 CIL 是什么 ........................................................................................................................... 40
2.3.3 Unity 3D 如何使用CIL 跨平台........................................................................................... 44
2.4 脚本的选择,C# 或 JavaScript ...................................................................................... 48
2.4.1 最熟悉的陌生人——UnityScript ........................................................................................ 48
2.4.2 UnityScript 与 JavaScript ..................................................................................................... 51
2.4.3 C#与UnityScript .................................................................................................................. 55
2.5 本章总结 ......................................................................................................................... 57
第3 章 Unity 3D 脚本语言的类型系统 .................................................................................... 58
3.1 C#的类型系统 ................................................................................................................. 58
3.2 值类型和引用类型 ......................................................................................................... 65
3.3 Unity 3D 脚本语言中的引用类型 .................................................................................. 73
3.4 Unity 3D 游戏脚本中的值类型 ...................................................................................... 90
3.4.1 Vector2、Vector3 以及Vector4 .......................................................................................... 90
3.4.2 其他常见的值类型 .............................................................................................................. 94
3.5 装箱和拆箱 ..................................................................................................................... 95
3.6 本章总结 ......................................................................................................................... 98
第4 章 Unity 3D 中常用的数据结构 ....................................................................................... 99
4.1 Array 数组 ..................................................................................................................... 100
4.2 ArrayList 数组 ............................................................................................................... 101
4.3 List数组 .................................................................................................................. 102
4.4 C#中的链表——LinkedList .................................................................................. 103
4.5 队列(Queue)和栈(Stack) ...................................................................... 107
4.6 Hash Table(哈希表)和Dictionary(字典) ................................................. 112
4.7 本章总结 ....................................................................................................................... 120
第5 章 在Unity 3D 中使用泛型 ............................................................................................ 121
5.1 为什么需要泛型机制 ................................................................................................... 121
5.2 Unity 3D 中常见的泛型 ................................................................................................ 124
5.3 泛型机制的基础 ........................................................................................................... 127
5.3.1 泛型类型和类型参数 ........................................................................................................ 128
5.3.2 泛型类型和继承 ................................................................................................................ 131
5.3.3 泛型接口和泛型委托 ........................................................................................................ 131
5.3.4 泛型方法 ............................................................................................................................ 136
5.4 泛型中的类型约束和类型推断 .................................................................................... 139
5.4.1 泛型中的类型约束 ............................................................................................................ 139
5.4.2 类型推断 ............................................................................................................................ 144
5.5 本章总结 ....................................................................................................................... 146
第6 章 在Unity 3D 中使用委托 ............................................................................................ 149
6.1 向Unity 3D 中的SendMessage 和BroadcastMessage 说拜拜 .................................... 150
6.2 认识回调函数机制——委托 ........................................................................................ 151
6.3 委托是如何实现的 ....................................................................................................... 154
6.4 委托是如何调用多个方法的 ........................................................................................ 160
6.5 用事件(Event)实现消息系统 .................................................................................. 164
6.6 事件是如何工作的 ....................................................................................................... 169
6.7 定义事件的观察者,实现观察者模式 ........................................................................ 172
6.8 委托的简化语法 ........................................................................................................... 177
6.8.1 不必构造委托对象 ............................................................................................................ 177
6.8.2 匿名方法 ............................................................................................................................ 178
6.8.3 Lambda 表达式 .................................................................................................................. 196
6.9 本章总结 ....................................................................................................................... 201
第7 章 Unity 3D 中的定制特性 ............................................................................................. 202
7.1 初识特性——Attribute ................................................................................................. 202
7.1.1 DllImport 特性 ................................................................................................................... 203
7.1.2 Serializable 特性 ................................................................................................................. 205
7.1.3 定制特性到底是谁 ............................................................................................................ 207
7.2 Unity 3D 中提供的常用定制特性 ................................................................................ 208
7.3 定义自己的定制特性类................................................................................................ 213
7.4 检测定制特性 ............................................................................................................... 216
7.5 亲手拓展Unity 3D 的编辑器 ....................................................................................... 217
7.6 本章总结 ....................................................................................................................... 227
第8 章 Unity 3D 协程背后的迭代器 ..................................................................................... 228
8.1 初识Unity 3D 中的协程 ............................................................................................... 228
8.1.1 使用StartCoroutine 方法开启协程 ................................................................................... 229
8.1.2 使用StopCoroutine 方法停止一个协程 ............................................................................ 233
8.2 使用协程实现延时效果................................................................................................ 234
8.3 Unity 3D 协程背后的秘密——迭代器 ........................................................................ 238
8.3.1 你好,迭代器 .................................................................................................................... 238
8.3.2 原来是状态机 .................................................................................................................... 242
8.3.3. 状态管理 ........................................................................................................................... 248
8.4 WWW和协程 ............................................................................................................... 253
8.5 Unity 3D 协程代码实例 ................................................................................................ 257
8.6 本章总结 ....................................................................................................................... 259
第9 章 在Unity 3D 中使用可空型 ........................................................................................ 260
9.1 如果没有值 ................................................................................................................... 260
9.2 表示空值的一些方案 ................................................................................................... 261
9.2.1 使用魔值 ............................................................................................................................ 261
9.2.2 使用标志位 ........................................................................................................................ 261
9.2.3 借助引用类型来表示值类型的空值 ................................................................................. 265
9.3 使用可空值类型 ........................................................................................................... 267
9.4 可空值类型的简化语法................................................................................................ 272
9.5 可空值类型的装箱和拆箱 ............................................................................................ 278
9.6 本章总结 ....................................................................................................................... 280
第10 章 从序列化和反序列化看Unity 3D 的存储机制 ......................................................... 281
10.1 初识序列化和反序列化.............................................................................................. 281
10.2 控制类型的序列化和反序列化 .................................................................................. 290
10.2.1 如何使类型可以序列化 .................................................................................................. 290
10.2.2 如何选择序列化的字段和控制反序列化的流程 ........................................................... 292
10.2.3 序列化、反序列化中流的上下文介绍及应用 ............................................................... 296
10.3 Unity 3D 中的序列化和反序列化 .............................................................................. 299
10.3.1 Unity 3D 的序列化概览 ................................................................................................... 299
10.3.2 对Unity 3D 游戏脚本进行序列化的注意事项 .............................................................. 302
10.3.3 如何利用Unity 3D 提供的序列化器对自定义类型进行序列化 .................................. 305
10.4 Prefab 和实例化之谜——序列化和反序列化的过程 ............................................... 309
10.4.1 认识预制体Prefab ........................................................................................................... 309
10.4.2 实例化一个游戏对象 ...................................................................................................... 311
10.4.3 序列化和反序列化之谜 .................................................................................................. 314
10.5 本章总结 ..................................................................................................................... 317
第11 章 移动平台动态读取外部文件 ................................................................................... 318
11.1 假如我想在编辑器里动态读取文件 .......................................................................... 318
11.2 移动平台的资源路径问题 .......................................................................................... 320
11.3 移动平台读取外部文件的方法 .................................................................................. 323
11.4 使用Resources 类加载资源 ....................................................................................... 330
11.5 使用WWW类加载资源 ............................................................................................ 332
11.5.1 利用WWW类的构造函数实现资源下载 ...................................................................... 332
11.5.2 利用 WWW.LoadFromCacheOrDownload 方法实现资源下载 ..................................... 333
11.5.3 利用WWWForm 类实现POST 请求 ............................................................................. 335
11.6 本章总结 ..................................................................................................................... 335
第12 章 在Unity 3D 中使用AssetBundle............................................................................ 336
12.1 初识AssetBundle ........................................................................................................ 336
12.2 使用AssetBundle 的工作流程 ................................................................................... 337
12.2.1 开发阶段 .......................................................................................................................... 337
12.2.2 运行阶段 .......................................................................................................................... 340
12.3 如何使用本地磁盘中的AssetBundle 文件................................................................ 344
12.4 AssetBundle 文件的平台兼容性 ................................................................................ 345
12.5 AssetBundle 如何识别资源 ........................................................................................ 345
12.6 本章总结 ..................................................................................................................... 346
第13 章 Unity 3D 优化 ......................................................................................................... 347
13.1 看看Unity 3D 优化需要从哪里着手 ......................................................................... 347
13.2 CPU 方面的优化 ......................................................................................................... 348
13.2.1 对DrawCall 的优化 ......................................................................................................... 348
13.2.2 对物理组件的优化 .......................................................................................................... 354
13.2.3 处理内存,却让CPU 受伤的GC................................................................................... 355
13.2.4 对代码质量的优化 .......................................................................................................... 356
13.3 对GPU 的优化 ............................................................................................................ 357
13.3.1 减少绘制的数目 .............................................................................................................. 358
13.3.2 优化显存带宽 .................................................................................................................. 358
13.4 内存的优化 ................................................................................................................. 359
13.4.1 Unity 3D 的内部内存 ....................................................................................................... 359
13.4.2 Mono 的托管内存 ............................................................................................................ 360
13.5 本章总结 ..................................................................................................................... 363
第14 章 Unity 3D 的脚本编译 .............................................................................................. 365
14.1 Unity 3D 脚本编译流程概览 ...................................................................................... 365
14.2 JIT 即时编译 ............................................................................................................... 368
14.2.1 使用编译器将游戏脚本编译为托管模块 ....................................................................... 368
14.2.2 托管模块和程序集 .......................................................................................................... 369
14.2.3 使用JIT 编译执行程序集的代码.................................................................................... 370
14.2.4 使用JIT 即时编译的优势 ............................................................................................... 371
14.3 AOT 提前编译 ............................................................................................................ 372
14.3.1 在Unity 3D 中使用AOT 编译 ........................................................................................ 372
14.3.2 iOS 平台和Full-AOT 编译 .............................................................................................. 373
14.3.3 AOT 编译的优势 ............................................................................................................. 374
14.4 谁偷了我的热更新?Mono、JIT 还是iOS ............................................................... 374
14.4.1 从一个常见的报错说起 .................................................................................................. 375
14.4.2 美丽的JIT ........................................................................................................................ 377
14.4.3 模拟JIT 的过程 ............................................................................................................... 378
14.4.4 iOS 平台的自我保护 ....................................................................................................... 381
14.5 Unity 3D 项目的编译与发布 ...................................................................................... 382
14.5.1 选择游戏场景和目标平台 .............................................................................................. 382
14.5.2 Unity 3D 发布项目的内部过程 ....................................................................................... 384
14.5.3 Unity 3D 部署到Android 平台 ........................................................................................ 384
14.5.4 Unity 3D 部署到iOS 平台 ............................................................................................... 386
14.6 本章总结 ..................................................................................................................... 389

本书勘误

印次
  • 页码:126  •  行数:19  •  印次: 2

    Hero改为String

    付睿 提交于 2017/3/30 8:57:57
    陈晓猛 确认于 2017/3/31 14:45:55

读者评论

  • 资源都在那下载啊?

    w43869121发表于 2020/5/18 14:35:45
    • 前言中没有提到资源下载,就没有提供资源。。。

      付睿发表于 2020/5/26 17:19:48
  • 书中代码必须手敲进行验证学习吗,没有提供下载么,亲?

    110395225@qq.com发表于 2017/9/26 0:10:12
    • 前言中没有提到资源下载,就没有提供资源。。。

      付睿发表于 2020/5/26 17:19:41

电子书版本

  • Epub
  • Mobi

相关图书

Unity VR 虚拟现实完全自学教程

邵伟 (作者)

本书是 VR 自学爱好者的一本入门书,全书共 16 章,全面讲述了在制作 VR 应用程序的过程中所必备的软/硬件知识。硬件层面以 HTC VIVE 为主要硬件平...

¥99.00

游戏架构实战:核心技术与面试精粹

樊松阳 (作者)

本书从架构与封装、艺术资源、底层核心、自定义扩展和独立游戏五个方向组织内容,每一方向均围绕一个问题展开论述,重点讲解了Unity 3D 开发的高级技巧。这种问答...

¥45.00

Unity 3D实战核心技术详解

姜雪伟 (作者)

《Unity 3D 实战核心技术详解》详细介绍了实际游戏开发中使用的核心技术,每一章都结合了游戏开发的实战案例。首先,介绍了3D 数学在Unity 中的运用,3...

¥49.00

Unity 5.x 完全自学手册

商宇浩 李一帆 张吉祥 (作者)

《Unity 5.x 完全自学手册》是初学者快速自学Unity 5.0软件及以上版本的实用全面教程。全书共分21章,从Unity 5.x 软件的安装和使用方法开...

¥69.00

Cocos2d-JS开发之旅——从HTML 5到原生手机游戏

郑高强 (作者)

本书主要内容分为基础篇、功能篇、进阶篇和实战篇。基础篇主要讲解Cocos2d-JS的基本框架内容。功能篇讲解一些复杂功能的实现,并以一个实际小游戏,让读者体验完...

¥79.00

体验引擎:游戏设计全景探秘

Tynan Sylvester(泰南·西尔维斯特) (作者) 秦彬 (译者)

电子游戏是如何与玩家产生共鸣,并流行于全世界的呢?本书作为一本实用书籍,将告诉读者如何正确的组合故事元素、心理学和博弈论,带领玩家超越盲目的娱乐。书中例子都来源...

¥49.00