●第1章 基礎知識1
1.1 Unity簡介 1
1.2 跨平臺與多工種協作 1
1.3 Unity版本 2
1.4 Unity內置資源或拓展資源 3
1.5 示例項目打包與發布 5
1.6 Unity服務 7
1.7 小結 8
第2章 編輯器的結構 9
2.1 遊戲項目 9
2.1.1 創建項目 9
2.1.2 打開項目 10
2.1.3 版本管理 10
2.1.4 安裝多個版本的Unity 11
2.2 Project視圖 12
2.2.1 創建資源 12
2.2.2 搜索資源 13
2.2.3 搜索標簽 14
2.3 Hierarchy視圖 16
2.3.1 創建遊戲對像 16
2.3.2 搜索遊戲對像 16
2.4 Inspector視圖 17
2.4.1 標題欄 17
2.4.2 組件欄 18
2.5 Scene視圖 19
2.5.1 導航欄 19
2.5.2 標題欄 20
2.5.3 坐標繫控制器 21
2.5.4 視圖預覽 21
2.6 Game視圖 22
2.6.1 標題欄 22
2.6.2 視圖預覽 23
2.7 導航欄視圖 23
2.8 其他功能 25
2.8.1 小鎖頭 25
2.8.2 窗口菜單 25
2.8.3 保存組件參數 26
2.8.4 Package Manager 26
2.9 小結 27
第3章 拓展編輯器 28
3.1 拓展Project視圖 28
3.1.1 拓展右鍵菜單 28
3.1.2 創建菜單 30
3.1.3 拓展布局 31
3.1.4 監聽事件 32
3.2 拓展Hierarchy視圖 33
3.2.1 拓展菜單 33
3.2.2 拓展布局 34
3.2.3 重寫菜單 35
3.3 拓展Inspector視圖 37
3.3.1 拓展源生組件 38
3.3.2 拓展繼承組件 38
3.3.3 組件不可編輯 40
3.3.4 Context菜單 42
3.4 拓展Scene視圖 44
3.4.1素 44
3.4.2 輔助UI 45
3.4.3 常駐輔助UI 46
3.4.4 禁用選中對像 47
3.5 拓展Game視圖 48
3.6 MenuItem菜單 49
3.6.1 覆蓋繫統菜單 50
3.6.2 自定義菜單 50
3.6.3 源生自定義菜單 51
3.6.4 拓展全局自定義快捷鍵 52
3.7 面板拓展 53
3.7.1 Inspector面板 53
3.7.2 EditorWindows窗口 55
3.7.3 EditorWindows下拉菜單 56
3.7.4 預覽窗口 57
3.7.5 獲取預覽信息 59
3.8 Unity編輯器的源碼 60
3.8.1 查看DLL 60
3.8.2 清空控制臺日志 61
3.8.3 獲取EditorStyles樣式 63
3.8.4 獲取內置圖標樣式 64
3.8.5 拓展默認面板 66
3.8.6 例子:查找ManagedStaticReferences()靜態引用 67
3.8.7 UIElements 69
3.8.8 查詢繫統窗口 71
3.8.9 自定義資源導入類型 73
3.9 小結 74
第4章 遊戲腳本 75
4.1 創建腳本 75
4.1.1 腳本模板 75
4.1.2 拓展腳本模板 76
4.2 腳本的生命周期 78
4.2.1 腳本綁定事件 80
4.2.2 腳本初始化和銷毀 80
4.2.3 腳本更新與協程任務 82
4.2.4 停止協程任務 83
4.2.5 使用OnGUI顯示FPS 84
4.3 多腳本管理 85
4.3.1 腳本的執行順序 85
4.3.2 多腳本優化 86
4.4 腳本序列化 86
4.4.1 查看數據 87
4.4.2 私有序列化數據 88
4.4.3 serializedObject 90
4.4.4 監素修改事件 91
4.4.5 序列化/反序列化監聽 92
4.4.6 ScriptableObject 95
4.4.7 腳本的Attributes特性 97
4.4.8 單例腳本 99
4.4.9 定時器 100
4.4.10 CustomYieldInstruction 101
4.4.11 工作線程 103
4.5 腳本編譯 104
4.5.1 編譯規則 105
4.5.2 優化編譯 105
4.5.3 編譯DLL 105
4.5.4 腳本跨平臺 106
4.5.5 程序集定義 106
4.5.6 日志 107
4.6 腳本調試 109
4.7 小結 111
第5章 UGUI遊戲界面 112
5.1素 112
5.1.1 Text 112
5.1.2 描邊和陰影 113
5.1.3 動態字體 113
5.1.4 字體花屏 114
5.1.5 Image組件 115
5.1.6 Raw Image組件 116
5.1.7 Button組件 116
5.1.8 Toggle組件 117
5.1.9 Slider組件 118
5.1.10 Scrollbar & ScrollView組件 119
5.1.11 使用ScrollRect組件制作遊戲搖杆 120
5.2 事件繫統 121
5.2.1 UI事件 122
5.2.2 UI事件管理 124
5.2.3 UnityAction和UnityEvent 126
5.2.4 RaycastTarget優化 128
5.2.5 滲透UI事件 129
5.2.6 例子——新手引導聚合動畫 131
5.3 Canvas組件 135
5.3.1 自適應屏幕 135
5.3.2 錨點對齊方式 137
5.3.3 背景圖全屏 138
5.3.4 布局組件 139
5.3.5 Canvas優化 139
5.4 Atlas 139
5.4.1 創建Atlas 139
5.4.2 讀取Atlas 140
5.4.3 Variant 141
5.4.4 多圖集管理 142
5.5 UGUI實例 142
5.5.1 置灰 142
5.5.2 粒子特效與UI的排序 145
5.5.3 Mask & RectMask2D裁切 147
5.5.4 粒子的裁切 148
5.5.5 粒子自適應 152
5.5.6 滑動列表嵌套 154
5.5.7 UI模板嵌套 156
5.5.8 UI特效與界面分離 157
5.5.9 輸入事件 161
5.5.10 按鈕不規則點擊區域 162
5.5.11 更換默認Shader 164
5.5.12 小地圖優化 164
5.5.13 查看UGUI源碼 165
5.6 小結 165
第6章 2D遊戲開發 166
6.1 Sprite 166
6.1.1 2D攝像機與分辨率自適應 167
6.1.2 Sprite Renderer排序 169
6.1.3 裁切 170
6.2 Sprite動畫 171
6.2.1 創建2D動畫 171
6.2.2 2D動畫控制器 173
6.3 Tile地圖 176
6.3.1 創建Tile 176
6.3.2 Tile Palette 178
6.3.3 編輯Tile 178
6.3.4 多Tile編輯與排序 179
6.3.5 拓展Tile Palette 180
6.3.6 拓展Tile 183
6.3.7 更新Tile 184
6.4 2D踫撞檢測 186
6.4.1 Collider 2D 186
6.4.2 Rigidbody 2D 187
6.4.3 踫撞事件 189
6.4.4 踫撞方向 191
6.4.5 觸發器監聽 193
6.4.6 Effectors 2D 193
6.4.7 優化 194
6.4.8 計算區域 194
6.5 小結 195
第7章 動畫繫統 196
7.1 模型 196
7.1.1 Mesh Filter 196
7.1.2 Mesh Renderer 197
7.1.3 Prefab 197
7.2 動畫編輯器 198
7.2.1 編輯器面板 198
7.2.2 在編輯器中添加事件 199
7.3 導入類動畫 200
7.3.1 人形重定向動畫 200
7.3.2 通用動畫 202
7.3.3 老版動畫 203
7.3.4 導入類動畫事件 203
7.4 動畫控制器 203
7.4.1 繫統狀態 204
7.4.2 切換條件 205
7.4.3 狀態機腳本 206
7.4.4 IK動畫 207
7.4.5 Root Motion 209
7.4.6 Avatar Mask 210
7.4.7 層 211
7.4.8 Blend Tree 212
7.4.9 非運行播放動畫 213
7.4.10 Animator Override Controller 214
7.4.11 RuntimeAnimator-
Controller 215
7.5 TimeLine編輯器 215
7.5.1 創建Timeline 216
7.5.2 Activation Track 217
7.5.3 Animation Track 217
7.5.4 Audio Track 218
7.5.5 Control Track 218
7.5.6 Playable Track 219
7.5.7 自定義 Track 221
7.6 Playables 222
7.6.1 播放動畫 222
7.6.2 動畫混合 224
7.6.3 音頻混合 225
7.6.4 自定義腳本 226
7.7 Constraint 227
7.7.1 Aim Constraint 227
7.7.2 Parent Constraint 228
7.7.3 腳本控制約束 229
7.8 小結 229
第8章 持久化數據 230
8.1 Excel 230
8.1.1 EPPlus 230
8.1.2 讀取Excel 230
8.1.3 寫入Excel 232
8.1.4 JSON 233
8.1.5 JSON支持字典 235
8.2 文件讀取與寫入 236
8.2.1 PlayerPrefs 237
8.2.2 EditorPrefs 237
8.2.3 PlayerPrefs保存復雜結構 238
8.2.4 TextAsset 239
8.2.5 讀寫文本 240
8.2.6 運行期讀寫文本 240
8.2.7 PersistentDataPath目錄 242
8.2.8 遊戲存檔 243
8.3 XML 247
8.3.1 創建XML 247
8.3.2 讀取與修改 248
8.3.3 XML文件 249
8.4 YAML 251
8.4.1 YamlDotNet 252
8.4.2 序列化和反序列化 252
8.4.3 讀取配置 253
8.5 小結 255
第9章 靜態對像 256
9.1 Lightmap 256
9.1.1 設置烘焙貼圖 256
9.1.2 實時光和焙貼光共存 258
9.1.3 燈光管理 258
9.1.4 運行時更換烘焙貼圖 258
9.1.5 動態更換遊戲對像 260
9.1.6 復制遊戲對像 262
9.2 遮擋剔除 263
9.2.1 遮擋與被遮擋 264
9.2.2 遮擋與被遮擋事件 265
9.2.3 動態剔除 267
9.2.4 自定義遮擋剔除 267
9.3 Batching(靜態合批) 268
9.3.1 設置靜態合批 268
9.3.2 腳本靜態合批 269
9.3.3 動態合批 269
9.3.4 靜態合批的隱患 270
9.4 尋路網格 270
9.4.1 設置尋路 270
9.4.2 連接兩點 272
9.4.3 獲取尋路路徑 272
9.4.4 動態阻擋 274
9.4.5 導出尋路網格信息 274
9.5 反射探頭 277
9.6 小結 278
第10章 多媒體 279
10.1 音頻 279
10.1.1 音頻文件 279
10.1.2 Audio Source 280
10.1.3 3D音頻 280
10.1.4 代碼控制播放 281
10.1.5 混音區 283
10.1.6 Audio Mixer 284
10.1.7 錄音 284
10.1.8 聲音進度 285
10.2 視頻 287
10.2.1 視頻文件 287
10.2.2 視頻渲染模式 287
10.2.3 視頻自適應 288
10.2.4 UI蓋在視頻之上 289
10.2.5 視頻渲染在材質上 290
10.2.6 視頻Render Texture 291
10.2.7 播放工程外視頻 291
10.2.8 自定義視頻顯示 293
10.2.9 視頻進度 293
10.3 小結 294
第11章 資源加載與優化 295
11.1 編輯模式 295
11.1.1 加載資源 295
11.1.2 實例化Prefab 296
11.1.3 創建Prefab 297
11.1.4 更新Prefab 298
11.1.5 卸載資源 299
11.1.6 遊戲對像與資源的關繫 299
11.2 版本管理 300
11.2.1 .meta文件 300
11.2.2 多工程 301
11.2.3 同步文件 302
11.2.4 SVN外鏈 303
11.3 運行模式 304
11.3.1 引用資源 304
11.3.2 Resources 305
11.3.3 刪除對像 306
11.3.4 刪除資源 306
11.3.5 GC 307
11.4 AssetBundle 308
11.4.1 設置AssetBundle 308
11.4.2 依賴關繫 310
11.4.3 通過腳本設置依賴關繫 311
11.4.4 壓縮格式 311
11.4.5 加載包體內的AssetBundle 312
11.4.6 下載AssetBundle 313
11.4.7 加載場景 314
11.4.8 卸載AssetBundle 315
11.5 遊戲對像 315
11.5.1 創建遊戲對像 316
11.5.2 Transform設置排序 316
11.5.3 刪除節點 317
11.5.4 獲取遊戲對像 317
11.5.5 管理遊戲組件 318
11.6 優化工具 319
11.6.1 重復無用資源 319
11.6.2 查看內存 321
11.6.3 查看CPU效率 321
11.6.4 自定義觀察區間 322
11.6.5 Profiler信息的導出與導入 323
11.6.6 Frame Debugger 324
11.7 資源管理實例 325
11.7.1 特殊內置的文件夾 325
11.7.2 隱藏文件夾 326
11.7.3 Resources與AssetBundle
無縫切換 326
11.7.4 資源加載策略 329
11.7.5 資源更新 329
11.7.6 資源引用關繫 329
11.7.7 繫統資源修改 332
11.7.8 AssetBundle裡的腳本 333
11.7.9 熱更新代碼 334
11.8 小結 335
第12章 自動化與打包 336
12.1 資源導入 336
12.1.1 監聽導入事件 336
12.1.2 自動設置貼圖壓縮格式 337
12.1.3 自動設置模型 339
12.1.4 禁止模型生成材質文件 340
12.1.5 刪除移動資源事件 341
12.1.6 選擇性自動設置 342
12.1.7 主動設置 342
12.1.8 待保存狀態 343
12.1.9 自動執行MenuItem 344
12.2 配置錯誤 345
12.2.1 主動檢查工具 345
12.2.2 被動檢查工具 346
12.2.3 導出類檢查工具 346
12.2.4 導出UI 346
12.2.5 生成UI代碼 347
12.2.6 導出模型 351
12.2.7 不參與保存對像 352
12.2.8 導出場景 353
12.2.9 過濾無用場景 355
12.3 自動打包 356
12.3.1 打包前後事件 356
12.3.2 打包後自動壓縮 357
12.3.3 用C# 調用shell腳本 359
12.3.4 等待shell結束 359
12.3.5 shell腳本調用C# 360
12.3.6 shell腳本自動打包 362
12.3.7 解放程序員的雙手 365
12.4 自動構建圖集與壓縮 366
12.4.1 UI圖集的壓縮 366
12.4.2 非UI圖集壓縮 370
12.5 小結 371
第13章 3D遊戲開發 372
13.1 Shader 372
13.1.1 固定渲染管線 372
13.1.2 可編程渲染管線 375
13.1.3 可編程渲染管線的表面著色器 378
13.1.4 深度排序 379
13.1.5 透明 381
13.1.6 裁切 382
13.1.7 著色器變體采集 383
13.2 攝像機 384
13.2.1 3D坐標轉換屏幕坐標 384
13.2.2 3D坐標轉換UI坐標 385
13.2.3 主攝像機 387
13.2.4 在UI上顯示模型 387
13.2.5 Render Texture 389
13.2.6 在Render Texture上顯示帶特效的模型 390
13.2.7 LOD Group 392
13.3 場景管理 393
13.3.1 切換場景 393
13.3.2 DontDestroyOnLoad 393
13.3.3 異步加載場景以及進度 393
13.3.4 多場景 395
13.3.5 多場景遊戲對像管理 396
13.3.6 場景切換事件 397
13.3.7 多場景烘焙 398
13.4 輸入事件 398
13.4.1 全局事件 398
13.4.2 射線 399
13.4.3 點選3D模型 400
13.4.4 通過點擊控制人物移動 402
13.5 物理踫撞 403
13.5.1 踫撞器 404
13.5.2 角色控制器 404
13.5.3 踫撞區域 405
13.5.4 踫撞檢測 406
13.5.5 踫撞觸發器 407
13.5.6 物理調試器 408
13.6 實戰技巧 409
13.6.1 3D頭頂文字 409
13.6.2 圖文混排 410
13.6.3 圖片數字 410
13.6.4 遊戲對像緩存池 412
13.6.5 遊戲資源緩存池 414
13.6.6 運行時合並網格 414
13.6.7 運行時合並貼圖 416
13.7 小結 419