首页>参考读物>计算机科学与技术>软件与程序设计

Unity3D高级编程:主程手记
作者 : 陆泽西 著
出版日期 : 2021-12-21
ISBN : 978-7-111-69819-7
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 386
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书分 10 章,每章都是一个独立的知识领域,读者可以按照章节顺序阅读本书,也可以根据喜好挑选自己感兴趣的章节学习。第 1 章讲了架构的意义、架构的原理以及如何实现架构。第 2 章对 C# 技术的基础知识做了详细的讲解。第 3 章主要针对客户端中的表格数据、程序的协作与应用进行讲解。第 4章介绍的是用户界面(UI)的工作原理与优化手段。第 5 章针对 3D 模型的原理、动画的原理以及两者的优化做了详细的讲解。第 6 章介绍的是网络层的业务与底层原理。第 7 章针对各种 AI 类型进行了解析。第 8 章主要介绍场景构建与优化、地图构建以及寻路算法优化的相关知识。第 9 章则给出了图形数学、图形学常用算法、渲染管线的相关知识。第 10 章针对客户端各类渲染技术的渲染原理进行了详细的解析。

图书特色

Unity3D游戏开发领域里程碑之作,上市公司资深游戏主程多年工作经验结晶。
层层拆解Unity3D游戏客户端架构,深入剖析各个模块技术方案,详细讲解游戏客户端的渲染原理。

图书前言

为什么要写这本书
编写本书的来龙去脉要从很多年前说起。2009年毕业的我自视甚高,错过了很多好的学习机会,待我清醒过来时已经是2011年,周围的人已经走了很远。一天晚上,我幡然醒悟,告诉自己不能再浑浑噩噩下去,我得学些可以傍身的技能。非常幸运的是,我赶上了Unity3D引擎的大潮,它让我有机会入门游戏开发领域,跨过前人需要数年甚至数十年才能跨过的技术难关。那时,Unity3D刚发布2.4版本,我边学理论边实践,从此与其结下了不解之缘。
2013年,我开始担任Unity3D主程一职,虽然现在回头来看,那时的我仍是个“菜鸟”,但当时的我可并不这么认为,我认为自己的技术已经强大到可以驾驭整个客户端,并且能扎实地完成游戏项目从开发到上线的整个过程,年轻人敢闯敢拼的劲头在那时的我的身上体现得淋漓尽致。虽然当时是第一次当主程,却敢承诺老板3个月内开发出对方想要的游戏。事实上,到最后,3个月又3个月,半年之后该游戏才完成开发。
2014年手机游戏开始火遍全球,游戏主程突然成了一个热门职业,我也陆续在各公司里担任主程,曾为日企交接过畅销项目,也为动视暴雪Activision开发过“使命召唤”系列手游,还在历史悠久的盛大游戏里工作了一段时间。就这样跌跌撞撞地,6年过去了,2020年,我到了一家新公司,这里的技术让我大开眼界,也让我对技术有了更高层次的理解,我如饥似渴地学习着,学习的不只是技术,还有生活。
回过头来看,我比较幸运,搭上了Unity3D的便车,搭上了手机游戏的便车,但不可否认的是,我的学习热情与拼命三郎般的努力,是让自己在浪潮中牢牢抓住机会的主因。说到努力,古今中外,不少先贤和前辈都是长期努力拼搏的典范,远如孔孟与管仲、唐太宗与成吉思汗、富兰克林与林肯等,近到游戏业界的UWA张鑫、云风(吴云洋的笔名)、吴军等,他们为自己的事业倾注了大量的心血和汗水。前面的路还很长,我告诉自己要学习他们十年如一日的自律精神,并保持饱满的精力不断前进。
2016年,我有了写一本关于自己是如何理解Unity3D和游戏开发的书的想法,但一直未付诸行动,直到2018年年初才着手写了些草稿。行动是最好的开始,也是自信的良药,我试着把所写的文章发到网上,虽然当时的文字功底不足,文句时有不通,结构也存在不合理的情况,但许多网友看了之后仍给我点赞和鼓励,实在让我感激不尽、感动不已。从此之后,我喜欢上了写作的感觉,一发不可收拾,一篇又一篇,一章又一章。在写作过程中,我发现自己的知识面存在诸多不足,甚至对有些知识点的理解是错误的,于是我拼命查看各类技术书籍和资料,以完善自己的知识体系。
可是,知识的吸收是一个渐进的过程,不可能一下子就融会贯通,虽然短期内我写文章的进步不大,但最大的安慰是,在我的努力下,书有了比较明确的框架,我对技术面的理解也到了一个新的高度。
为了弥补我的短板,在写书期间我除了阅读各类技术书以外,还开始阅读一些人文类的图书,并尝试在博客上写一些故事,训练自己的写作能力。渐渐地,我的博客上有了很多非技术类的文章,我把它们称为我的学习之路,这些文章包括我对人和事的理解、自我反省和一些阅读感想。让我惊喜的是,这些非技术性的内容竟然让我对技术的理解达到了更高的层次,我突然发现生活和工作是可以融合在一起的,这是多么奇妙的一件事!
在努力加强自己的文字功底,完善自己的知识体系的同时,我也在项目中不断地实践所学的知识,日积月累,我的写作素材越来越丰富,最终完成了本书的创作。
在写作过程中,我对本书进行了3次重构,为的就是能更好地表达技术原理,更全面和准确地讲解技术要点。本书包括架构、C#技术知识、数据表与程序、UI、3D模型与动画、网络通信、人工智能、地图与寻路、渲染管线与图形学等,覆盖了Unity3D游戏项目几乎所有的技术要点,确保读者能看到Unity3D游戏项目的技术全貌,进而对各项技术与知识点有更深层次的理解。书中不仅关注了项目中比较大的解决方案,还讲解了具体的技术细节,让读者不仅有更宏观的视野去审视自己的项目,还能在书中找到最接地气的技术细节,从而更深入地理解技术原理。
感谢读者阅读前言,本人在阅览图书时最爱看前言,前言是最能体现作者心境的地方,它可以让你了解创作的起因和过程,以及其间发生的故事和感悟,让你对所读之书有更深的了解。
读者对象
从行业用户角度来看,本书适合以下读者阅读:
Unity3D程序员和爱好者
游戏开发者和游戏前端主程
虚拟现实项目的开发者
技术美术工程师和爱好者
致力于图形图像和引擎架构的程序员
开设相关课程的院校
如何阅读本书
本书共10章,每章都是一个独立的知识领域,读者可以按照章节顺序阅读本书,也可以根据喜好挑选自己感兴趣的章节学习。如果你是一名经验丰富的程序员,能够理解游戏编程的相关基础知识,那么你可以直接阅读你感兴趣的章节。如果你是一名初学者,建议尽量从第1章开始学习。
第1章讲了架构的意义、架构的原理以及如何实现架构。第2章对C#技术的基础知识做了详细的讲解。第3章主要针对客户端中的表格数据、程序的协作与应用进行讲解。第4章介绍的是用户界面(UI)的工作原理与优化手段。第5章针对3D模型的原理、动画的原理以及两者的优化做了详细的讲解。第6章介绍的是网络层的业务与底层原理。第7章针对各种AI类型进行了解析。第8章主要介绍场景构建与优化、地图构建以及寻路算法优化的相关知识。第9章则给出了图形数学、图形学常用算法、渲染管线的相关知识。最后一章(第10章)针对客户端各类渲染技术的渲染原理进行了详细的解析。
勘误和支持
由于笔者的水平有限,写书的时间也很紧张,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。我在Github上开了个仓库做问题集记录:https://github.com/luzexi/Unity3dToBeLeader/issues,如果你发现书中的错误,可以将其发布到这个网页地址的问题列表中,我将会及时反馈。本书内容基于我的个人博客(http://www.luzexi.com)整理而成,此系列后续还会更新,本书涉及的参考资料也会发布到此博客上。如果你有更多的宝贵意见,也欢迎发送邮件至邮箱jesse_luzexi@163.com,很期待听到你们的真挚反馈。
致谢
感谢同事以及网友的支持和点赞,感谢《Unity3D网络游戏实战》的作者罗培羽给予的帮助,感谢机械工业出版社杨绣国老师细致缜密的审阅。特别要感谢我的妻子余胜男,为了支持我安心地写书和工作,她不仅承担了所有家务,辛苦万分,还不忘开导我,当我的心理医生,为我排忧,这本书实在是应该作为礼物献给她。感谢我的两个女儿陆秀恩(Sharon)与陆安妮(Anne),她们是世界上最好的女儿,知道该如何说出自己的诉求,并懂得遵守规则的重要性,时常还能“曲线救国”,她们经常鼓励我“爸爸加油!”,很感激孩子们能和我一起努力,学习的路上又多了两个知己,真开心!

陆泽西
中国,深圳

上架指导

计算机\程序设计

封底文字

Unity引擎大大降低了游戏开发的门槛,让学生和没有太多编程经验的爱好者较容易进入这个领域。但想要更深入地了解这款引擎,或想在游戏开发领域一展身手,就不得不系统地进行学习,这本书恰好是一个不错的开始!
—— 引擎技术专家 侯鑫
本书作者是一位行动力超强的人,爱钻研技术,爱锻炼身体。看他的书不只能学技术,还能感受到积极的人生态度。
—— 心动网络主程 杨宜强
曾有朋友跟我交流,他在工作中分配到的任务是简单地拼UI,但他想成长为主程,不知道应该从哪里入手。在我看来,本书就是答案,书中以通俗易懂的方式阐述了Unity3D技术原理和实现方案,并给出了相应的实战案例,相信能让读者快速提升专项技能。
——《百万在线:大型游戏服务端开发》作者 罗培羽
本书作者也曾是一个小兵,他通过自己不懈的努力,一路“打怪”升级到主程,积累了丰富的实战经验,本书正是他多年经验的总结,推荐给对游戏开发感兴趣的读者。
—— 资深技术专家 车雄生
本书不仅针对Unity游戏开发的多个重要模块进行了详细讲解,还介绍了许多性能优化原理和技巧,书中包含作者十多年的游戏开发经验,可让读者深入理解Unity3D高级游戏开发的精髓,读完此书,你将收获满满!
—— 盛趣游戏主程 李超
通读全书,可以感受到作者多年来扎实的积累和写本书花费的心思。书中针对UI、模型、动画等知识进行了深入的讲解,这对从2D项目转3D项目的程序员和技术管理者非常有帮助;网络、AI、寻路等则是资深程序员必须精通的基础知识,即使是有着丰富3D开发经验的技术人员,也可以通过阅读本书进行系统梳理。此外,本书重点剖析的常用容器几乎是我们平时面试必问的内容,渲染知识则是我们招聘资深程序员时常问的知识点。如果你恰好需要面试,读完本书,相信一定能大幅提升面试的成功率!
—— 盛趣游戏项目负责人 金鑫
本书深入浅出地讲解了游戏研发过程中需要掌握的大量知识点,如果你是希望进阶主程的读者,推荐阅读本书!
—— UWA创始人&CEO 张鑫

图书目录

前 言
第1章 软件架构 1
1.1 架构的意义 1
1.2 软件架构的思维方式 5
1.3 如何构建Unity3D项目 9
第2章 C#技术要点 14
2.1 Unity3D中C#的底层原理 14
2.2 List底层源码剖析 17
2.3 Dictionary底层源码剖析 27
2.4 浮点数的精度问题 39
2.5 委托、事件、装箱、拆箱 44
2.5.1 委托与事件 44
2.5.2 装箱和拆箱 45
2.6 排序算法 48
2.6.1 快速排序算法 48
2.6.2 最大最小堆 50
2.6.3 其他排序算法概述 51
2.7 各类搜索算法 51
2.7.1 搜索算法概述 52
2.7.2 二分查找算法 52
2.7.3 二叉树、二叉查找树、平衡二叉树、红黑树和B树 52
2.7.4 四叉树搜索算法 53
2.7.5 八叉树搜索算法 54
2.8 业务逻辑优化技巧 54
2.8.1 使用List和Dictionary时提高效率 55
2.8.2 巧用struct 55
2.8.3 尽可能地使用对象池 57
2.8.4 字符串导致的性能问题 61
2.8.5 字符串的隐藏问题 64
2.8.6 程序运行原理 65
第3章 数据表与程序 68
3.1 数据表的种类 68
3.1.1 大部分数据都是在Excel里生成的 68
3.1.2 最原始的数据方式—代码数据 69
3.1.3 文本数据 69
3.1.4 比特流数据 70
3.2 数据表的制作方式 71
3.2.1 制作方式简介 71
3.2.2 让数据使用起来更加方便 72
3.3 多语言的实现 75
第4章 用户界面 78
4.1 用户界面系统的比较 78
4.2 UGUI系统的原理及其组件使用 79
4.2.1 UGUI系统的运行原理 79
4.2.2 UGUI系统的组件 80
4.3 UGUI事件模块剖析 82
4.3.1 UGUI事件系统源码剖析 82
4.3.2 输入事件源码 82
4.3.3 事件数据模块 83
4.3.4 输入事件捕获模块源码 84
4.3.5 射线碰撞检测模块源码 89
4.3.6 事件逻辑处理模块 91
4.4 UGUI核心源码剖析 91
4.4.1 UGUI核心源码结构 91
4.4.2 Culling模块 91
4.4.3 Layout模块 93
4.4.4 MaterialModif?iers、Specialized-Collections和Utility 94
4.4.5 VertexModif?iers 95
4.4.6 核心渲染类 96
4.5 快速构建一个简单易用的UI框架 101
4.6 UI优化 107
4.6.1 UI动静分离 108
4.6.2 拆分过重的UI 108
4.6.3 UI预加载 109
4.6.4 UI图集Alpha分离 110
4.6.5 UI字体拆分 111
4.6.6 Scroll View优化 112
4.6.7 网格重构的优化 113
4.6.8 UI展示与关闭的优化 114
4.6.9 对象池的运用 114
4.6.10 UI贴图设置的优化 115
4.6.11 内存泄漏 117
4.6.12 针对高低端机型的优化 123
4.6.13 UI图集拼接的优化 126
4.6.14 GC的优化 127
第5章 3D模型与动画 134
5.1 美术资源规范 134
5.2 合并3D模型 141
5.2.1 网格模型的基础知识 141
5.2.2 动态批处理 143
5.2.3 静态批处理 144
5.2.4 自己编写合并3D模型的程序 145
5.3 状态机 147
5.3.1 如何用状态机模拟人物行为动作 147
5.3.2 在游戏的人物行为动作中使用状态机 148
5.3.3 在游戏项目中使用状态机的地方 148
5.4 3D模型的变与换 152
5.4.1 切割模型 154
5.4.2 扭曲模型 156
5.4.3 简化模型 157
5.4.4 蒙皮骨骼动画 159
5.4.5 人物3D模型动画换皮换装 165
5.4.6 捏脸 167
5.4.7 动画优化 169
5.5 资源的加载与释放 176
第6章 网络通信 183
6.1 TCP与UDP 183
6.1.1 TCP和UDP简介 183
6.1.2 UDP的特点 185
6.1.3 是用TCP还是用UDP 186
6.2 C#实现TCP 187
6.2.1 程序实现TCP长连接 187
6.2.2 TCP的API库 187
6.2.3 线程锁 188
6.2.4 缓冲队列 188
6.2.5 双队列结构 190
6.2.6 发送数据 191
6.2.7 协议数据定义标准 192
6.2.8 断线检测 195
6.3 C#实现UDP 196
6.3.1 实现UDP 196
6.3.2 连接确认机制 196
6.3.3 数据包校验与重发机制 199
6.3.4 丢包问题分析 201
6.4 封装HTTP 202
6.4.1 HTTP协议原理 202
6.4.2 HTTP1.0、HTTP1.1、HTTP2.0简述 204
6.4.3 在Unity3D中的HTTP封装 206
6.4.4 多次请求时连续发送HTTP请求引起的问题 209
6.5 网络数据协议原理 222
6.5.1 协议包的格式 222
6.5.2 JSON 223
6.5.3 自定义二进制数据流协议格式 224
6.5.4 MessagePack 226
6.5.5 Protobuf 229
6.5.6 限定符的规则 231
6.5.7 Protobuf的原理:序列化和反序列化 232
6.5.8 Protobuf更改数据结构后的兼容问题 235
6.5.9 Protobuf的优点 236
6.5.10 Protobuf的不足 237
6.6 网络同步解决方案 237
6.6.1 状态同步法 237
6.6.2 实时广播同步法 239
6.6.3 帧同步 240
6.6.4 同步快进 242
6.6.5 精度问题 243
6.6.6 同步锁机制 244
第7章 游戏中的AI 245
7.1 用状态机构建AI 245
7.2 用行为树构建AI 251
7.2.1 复合节点 252
7.2.2 修饰节点 253
7.2.3 条件节点 253
7.2.4 行为节点 253
7.3 非典型性AI 255
7.3.1 可演算式AI 255
7.3.2 博弈式AI 257
第8章 地图与寻路 259
8.1 A星算法及其优化 259
8.1.1 长距离导航 262
8.1.2 A星排序算法优化 264
8.1.3 寻路期望值优化 265
8.1.4 通过权重引导寻路方向 267
8.1.5 拆分寻路区域 268
8.1.6 A星算法细节优化 270
8.1.7 寻路规则优化JPS 271
8.2 寻路网格的构建 275
8.2.1 数组构建网格 275
8.2.2 路点网格 277
8.2.3 平面三角形网格 279
8.2.4 多层级网格 282
8.2.5 三角形网格中的A星算法 283
8.2.6 体素化寻路网格 286
8.2.7 RecastNavigation Navmesh 288
8.3 地图编辑器 290
8.3.1 地图编辑器的基本功能 290
8.3.2 数据协议格式在编辑器中的选择 292
8.3.3 地图加载方式 293
8.3.4 地图九宫格 294
8.4 地图的制作与优化 296
8.4.1 地图的制作方式 296
8.4.2 常规场景的性能优化 299
第9章 渲染管线与图形学 306
9.1 图形学基础 306
9.1.1 向量的意义 307
9.1.2 点积的几何意义 307
9.1.3 叉乘的几何意义 308
9.1.4 向量之间的投影 309
9.1.5 矩阵的意义 310
9.1.6 矩阵旋转、缩放、投影、镜像和仿射 312
9.1.7 齐次坐标的平移矩阵 320
9.1.8 如何理解四元数 321
9.2 渲染管线 324
9.2.1 OpenGL、DirectX图形接口 324
9.2.2 渲染管线是什么 325
9.2.3 混合 337
9.2.4 渲染管线总结 341
第10章 渲染原理与知识 343
10.1 渲染顺序 343
10.2 Alpha Test 345
10.3 Early-Z GPU硬件优化技术 347
10.4 Mipmap的原理 348
10.5 显存的工作原理 350
10.6 Filter滤波方式 351
10.7 实时阴影是如何生成的 354
10.8 光照纹理烘焙原理 357
10.9 GPU Instancing的来龙去脉 362
10.10 着色器编译过程 369
10.11 Projector投影原理 372

教学资源推荐
作者: [美] 托尼·加迪斯(Tony Gaddis) 著
作者: [美]布莱恩· W.克尼汉(Brian W. Kernighan),丹尼斯· M.里奇(Dennis M.Ritchie) 著
作者: 刘博 董学文 等编著
参考读物推荐
作者: 刘文如 编著
作者: 钟大伟 高铎 王鹏 宋超 著
作者: [印度]阿南德·巴拉钱德拉·皮莱(Anand Balachandran Pillai)著
作者: 深圳中科呼图信息技术有限公司 编著