內容簡介
Unity 是一款市場占有率非常高的商業遊戲引擎,橫跨25 個主流遊戲平台。本書基於Unity 2018,結合2D 遊戲開發和3D 遊戲開發的案例,詳細介紹了它的方方面面,內容涉及編輯器、遊戲腳本、UGUI 遊戲界面、動畫系統、持久化數據、靜態對象、多媒體、資源載入與最佳化、自動化與打包等。
本書適合初學者或者有一定基礎的開發者閱讀。
圖書目錄
第 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.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.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.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.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.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"