Unity3D 高級編程 : 主程手記
內容描述
本書分 10 章,每章都是一個獨立的知識領域,
讀者可以按照章節順序閱讀本書,也可以根據喜好挑選自己感興趣的章節學習。
第 1 章講了架構的意義、架構的原理以及如何實現架構。
第 2 章對 C# 技術的基礎知識做了詳細的講解。
第 3 章主要針對客戶端中的表格數據、程序的協作與應用進行講解。
第 4章介紹的是用戶界面(UI)的工作原理與優化手段。
第 5 章針對 3D 模型的原理、動畫的原理以及兩者的優化做了詳細的講解。
第 6 章介紹的是網絡層的業務與底層原理。
第 7 章針對各種 AI 類型進行了解析。
第 8 章主要介紹場景構建與優化、地圖構建以及尋路算法優化的相關知識。
第 9 章則給出了圖形數學、圖形學常用算法、渲染管線的相關知識。
第 10 章針對客戶端各類渲染技術的渲染原理進行了詳細的解析。
目錄大綱
前 言
第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
作者介紹
陸澤西,遊戲業從業十多年的老兵,曾就職於盛大遊戲、動視暴雪等公司,現在是某上市公司的不錯工程師。研究方向為高性能遊戲開發,長期專注於遊戲客戶端架構和引擎技術,負責過多個大型遊戲的架構工作,擅長極限性能優化,擁有豐富的實戰經驗。樂於分享,撰寫了大量關於Unity3D和遊戲技術的文章。