Unity游戲優(yōu)化(第3版) 版權信息
- ISBN:9787302613282
- 條形碼:9787302613282 ; 978-7-302-61328-2
- 裝幀:一般膠版紙
- 冊數(shù):暫無
- 重量:暫無
- 所屬分類:>
Unity游戲優(yōu)化(第3版) 本書特色
Unity引擎提供的一系列卓越功能可以幫助開發(fā) 者構建高性能的游戲。本書引導讀者優(yōu)化游戲開發(fā)中的方方面面,從游戲角色到腳本,一直到動畫優(yōu)化。
在本書中,讀者將學習提高游戲腳本質(zhì)量的代碼編寫技術,學習如何使用E C S和Burs t編譯器等Unity技術優(yōu)化游戲。本書將助力讀者使用Unity生態(tài)系統(tǒng)管理第三方工具,引導讀者解決Unity大型游戲和V R游戲中的性能問題,幫助讀者檢測性能問題并分析性能根源。隨著閱讀的深入,讀者將學習Unity C#腳本代碼的*佳實踐并掌握使用模式,之后會掌握優(yōu)化音頻資源和紋理文件,以及高效地存儲和使用資源文件。然后,讀者將了解渲染管線并學習如何識別管線中的性能問題。此外,讀者還將學習如何優(yōu)化內(nèi)存以及Unity的處理器單元。*后,讀者將獲得Unity專家用于提升項目工作流的提示和技巧。
閱讀本書,讀者將提升使用Unity及其組件構建交互式游戲所需的技能。
Unity游戲優(yōu)化(第3版) 內(nèi)容簡介
主要內(nèi)容:
使用Unity Profiler發(fā)現(xiàn)程序中的瓶頸并找到解決方法
發(fā)現(xiàn)VR項目中關鍵的性能問題,并學習如何處理它們
以易用的方式增強著色器,通過細微而有效的性能調(diào)整優(yōu)化它們
使用物理引擎使場景盡可能動態(tài)化
組織、過濾和壓縮藝術資源,在保持高品質(zhì)的同時實現(xiàn)性能**化
使用Mono框架和C#實現(xiàn)內(nèi)存利用**化,以及優(yōu)化GC
Unity游戲優(yōu)化(第3版) 目錄
第Ⅰ部分 基本的腳本優(yōu)化
第1章 研究性能問題 2
1.1 使用Unity Profiler收集分析數(shù)據(jù) 3
1.1.1 啟動Profiler 4
1.1.2 Profiler窗口 8
1.2 性能分析的*佳方法 17
1.2.1 驗證腳本是否存在 18
1.2.2 驗證腳本次數(shù) 18
1.2.3 驗證事件的順序 19
1.2.4 *小化正在進行的代碼更改 20
1.2.5 *小化內(nèi)部影響 20
1.2.6 *小化外部影響 22
1.2.7 代碼片段的針對性
分析 22
1.3 關于分析的思考 26
1.3.1 理解Profiler工具 27
1.3.2 減少干擾 27
1.3.3 關注問題 28
1.4 本章小結 28
第2章 腳本策略 29
2.1 使用*快的方法獲取組件 30
2.2 移除空的回調(diào)定義 31
2.3 緩存組件引用 34
2.4 共享計算輸出 35
2.5 Update、Coroutines和InvokeRepeating 36
2.6 更快的GameObject空引用檢查 39
2.7 避免從GameObject中檢索字符串屬性 40
2.8 使用合適的數(shù)據(jù)結構 42
2.9 避免在運行時修改
Transform的父節(jié)點 43
2.10 關注緩存Transform的 變化 44
2.11 避免在運行時使用Find()和 SendMessage()方法 45
2.11.1 將引用分配給預先
存在的對象 48
2.11.2 靜態(tài)類 50
2.11.3 單例組件 52
2.11.4 全局消息傳遞系統(tǒng) 56
2.12 禁用未使用的腳本和 對象 66
2.12.1 通過可見性禁用對象 66
2.12.2 通過距離禁用對象 67
2.13 使用距離的平方而不是 距離 68
2.14 *小化反序列化行為 69
2.14.1 減小序列化對象 70
2.14.2 異步加載序列化對象 70
2.14.3 在內(nèi)存中保存之前加載的序列化對象 70
2.14.4 將公共數(shù)據(jù)移入ScriptableObject 71
2.15 疊加、異步地加載
場景 71
2.16 創(chuàng)建自定義的
Update()層 72
2.17 本章小結 76
第Ⅱ部分 圖形優(yōu)化
第3章 批處理的優(yōu)勢 78
3.1 Draw Call 79
3.2 材質(zhì)和著色器 81
3.3 Frame Debugger 83
3.4 動態(tài)批處理 85
3.4.1 頂點屬性 86
3.4.2 網(wǎng)格縮放 87
3.4.3 動態(tài)批處理總結 88
3.5 靜態(tài)批處理 89
3.5.1 Static標記 89
3.5.2 內(nèi)存需求 90
3.5.3 材質(zhì)引用 90
3.5.4 靜態(tài)批處理的警告 90
3.5.5 靜態(tài)批處理總結 91
3.6 本章小結 92
第4章 優(yōu)化藝術資源 93
4.1 音頻文件 93
4.1.1 導入音頻文件 94
4.1.2 加載音頻文件 94
4.1.3 編碼格式與品質(zhì)級別 97
4.1.4 音頻性能增強 98
4.2 紋理文件 101
4.2.1 紋理壓縮格式 101
4.2.2 紋理性能增強 103
4.3 網(wǎng)格和動畫文件 111
4.3.1 減少多邊形數(shù)量 112
4.3.2 調(diào)整網(wǎng)格壓縮 112
4.3.3 恰當使用Read-Write
Enabled 112
4.3.4 考慮烘焙動畫 113
4.3.5 合并網(wǎng)格 113
4.4 Asset Bundle和Resource 114
4.5 本章小結 115
第5章 加速物理引擎 116
5.1 物理引擎的內(nèi)部工作情況 117
5.1.1 物理和時間 117
5.1.2 靜態(tài)碰撞器和動態(tài)碰撞器 120
5.1.3 碰撞檢測 121
5.1.4 碰撞器類型 122
5.1.5 碰撞矩陣 124
5.1.6 Rigidbody激活和休眠狀態(tài) 124
5.1.7 射線和對象投射 125
5.1.8 調(diào)試物理 125
5.2 物理性能優(yōu)化 127
5.2.1 場景設置 127
5.2.2 適當使用靜態(tài)碰撞器 129
5.2.3 恰當使用觸發(fā)體積 129
5.2.4 優(yōu)化碰撞矩陣 130
5.2.5 首選離散碰撞檢測 131
5.2.6 修改固定更新頻率 132
5.2.7 調(diào)整允許的*大時間步長 133
5.2.8 *小化射線投射和邊界體積檢查 133
5.2.9 避免復雜的網(wǎng)格碰撞器 135
5.2.10 避免復雜的物理組件 137
5.2.11 使物理對象休眠 137
5.2.12 修改處理器迭代次數(shù) 138
5.2.13 優(yōu)化布娃娃 139
5.2.14 確定何時使用物理 141
5.3 本章小結 142
第6章 動態(tài)圖形 143
6.1 管線渲染 144
6.1.1 GPU前端 145
6.1.2 GPU后端 146
6.1.3 光照和陰影 149
6.1.4 多線程渲染 152
6.1.5 低級渲染API 153
6.2 性能檢測問題 153
6.2.1 分析渲染問題 153
6.2.2 暴力測試 155
6.3 渲染性能的增強 157
6.3.1 啟用/禁用GPU Skinning 157
6.3.2 降低幾何復雜度 157
6.3.3 減少曲面細分 157
6.3.4 應用GPU實例化 158
6.3.5 使用基于網(wǎng)格的LOD 159
6.3.6 使用遮擋剔除 160
6.3.7 優(yōu)化粒子系統(tǒng) 161
6.3.8 優(yōu)化Unity UI 163
6.3.9 著色器優(yōu)化 167
6.3.10 使用更少的紋理數(shù)據(jù) 173
6.3.11 測試不同的GPU紋理壓縮格式 174
6.3.12 *小化紋理交換 174
6.3.13 VRAM限制 175
6.3.14 照明優(yōu)化 176
6.3.15 優(yōu)化移動設備的渲染
性能 178
6.4 本章小結 180
第Ⅲ部分 高級優(yōu)化
第7章 虛擬現(xiàn)實和增強現(xiàn)實的優(yōu)化 182
7.1 XR技術概述 182
7.2 XR開發(fā) 183
7.3 XR中的性能增強 187
7.3.1 物盡其用 187
7.3.2 單通道立體渲染和多通道立體渲染 188
7.3.3 應用抗鋸齒 190
7.3.4 首選前向渲染 190
7.3.5 VR的圖像效果 190
7.3.6 背面剔除 191
7.3.7 空間化音頻 191
7.3.8 避免攝像機物理
碰撞 191
7.3.9 避免歐拉角 192
7.3.10 運動約束 192
7.3.11 跟上*新發(fā)展 192
7.4 本章小結 193
第8章 掌握內(nèi)存管理 194
8.1 Mono平臺 195
8.1.1 內(nèi)存域 196
8.1.2. 垃圾回收 198
8.2 代碼編譯 201
8.2 代碼編譯 201
8.3 分析內(nèi)存 204
8.3.1 分析內(nèi)存消耗 204
8.3.2 分析內(nèi)存效率 205
8.4 內(nèi)存管理性能增強 205
8.4.1 垃圾回收策略 205
8.4.2 手動JIT編譯 206
8.4.3 值類型和引用類型 207
8.4.4 字符串連接 214
8.4.5 裝箱 217
8.4.6 數(shù)據(jù)布局的重要性 218
8.4.7 Unity API中的數(shù)組 219
8.4.8 對字典鍵使用
InstanceID 220
8.4.9 foreach循環(huán) 221
8.4.10 協(xié)程 221
8.4.11 閉包 221
8.4.12 .NET庫函數(shù) 222
8.4.13 臨時工作緩沖區(qū) 222
8.4.14 對象池 223
8.4.15 預制池 225
8.4.16 IL2CPP優(yōu)化 239
8.4.17 WebGL優(yōu)化 239
8.5 本章小結 239
第9章 面向數(shù)據(jù)的技術棧 240
9.1 多線程的問題 241
9.2 Unity的作業(yè)系統(tǒng) 244
9.2.1 一個基本的作業(yè) 245
9.2.2 一個較復雜的示例 247
9.3 新的ECS 251
9.4 Burst編譯器 258
9.5 本章小結 259
第10章 使用GPU Instancing 優(yōu)化大量動畫對象 260
10.1 應用場景 260
10.2 實現(xiàn)思路 261
10.3 主要實現(xiàn)步驟 261
10.4 部分核心邏輯偽代碼 261
10.5 **個版本——實現(xiàn) 262
10.5.1 運行 262
10.5.2 項目概覽 265
10.5.3 編輯器烘焙代碼詳解 265
10.5.4 運行時代碼和Shader詳解 274
10.5.5 C#代碼詳解 281
10.6 第二個版本——優(yōu)化 282
10.6.1 AnimationInfo 283
10.6.2 GPUInstancing
Animation 283
10.6.3 AnimatorBakeInfo 283
10.6.4 AnimationBaker 284
10.7 本章小結 289
第11章 提示與技巧 290
11.1 編輯器熱鍵提示 291
11.1.1 GameObject 291
11.1.2 Scene窗口 291
11.1.3 數(shù)組 292
11.1.4 界面 293
11.1.5 在編輯器內(nèi)撰寫文檔 294
11.2 編輯器界面提示 294
11.2.1 腳本執(zhí)行順序 294
11.2.2 編輯器文件 294
11.2.3 Inspector 窗口 296
11.2.4 Project窗口 297
11.2.5 Hierarchy窗口 298
11.2.6 Scene和Game窗口 299
11.2.7 Play模式 299
11.3 腳本提示 300
11.3.1 一般情況 300
11.3.2 特性 301
11.3.3 日志 302
11.3.4 有用的鏈接 302
11.4 自定義編輯器腳本和 菜單提示 302
11.5 外部提示 303
11.6 其他提示 304
11.7 本章小結 305
展開全部
Unity游戲優(yōu)化(第3版) 作者簡介
Aversa博士擁有意大利羅馬大學(University of Rome La Sapienza)的人工智能博士學位以及人工智能和機器人碩士學位。他對用于開發(fā)交互式虛擬代理和程序內(nèi)容生成的人工智能有著濃厚的興趣。他曾擔任電子游戲相關會議的程序委員會成員,如IEEE計算智能和游戲會議,也經(jīng)常參加game-jam比賽。他還經(jīng)常撰寫有關游戲設計和游戲開發(fā)的博客。 我要感謝家人在這一年里給我提供了穩(wěn)定的生活;感謝Twitter上的Unity開發(fā)者幫助我澄清了Unity內(nèi)部最模糊的元素;還要感謝Keagan和Packt Publishing的其他編輯幫助我完成這項工作,并對我延遲交稿表示理解。 Chris Dickinson在英格蘭一個安靜的小鎮(zhèn)長大,對數(shù)學、科學,尤其是電子游戲滿懷熱情。他喜歡玩游戲并剖析游戲的玩法,并試圖確定它們是如何工作的。在看了爸爸破解一個PC游戲的十六進制代碼來規(guī)避早期的版權保護后,他完全震驚了,他對科學的熱情在當時達到了。Chris獲得電子物理學的碩士學位后,他飛到美國加州,在硅谷中心的科學研究領域工作。不久后,他不得不承認,研究工作并不適合他。在四處投簡歷之后,他找到了一份工作,最終讓他走上了軟件工程的正確道路(據(jù)說,這對于物理學專業(yè)畢業(yè)生來說并不罕見)。
Chris是IPBX電話系統(tǒng)的自動化工具開發(fā)人員,他的性格更適合從事該工作。現(xiàn)在,他正在研究復雜的設備鏈,幫助開發(fā)人員修復和改進這些設備,并開發(fā)自己的工具。Chris學習了很多關于如何使用大型、復雜、實時、基于事件、用戶輸入驅(qū)動的狀態(tài)機方面的知識。在這方面,Chris基本上是自學成才的,他對電子游戲的熱情再次高漲,促使他真正弄清楚了電子游戲的創(chuàng)建方式。當他有足夠的信心時,他回到學校攻讀游戲和模擬編程的學士學位。當他獲得學位時,已經(jīng)可以用C++編寫自己的游戲引擎(盡管還很初級),并在日常工作中經(jīng)常使用這些技能。然而,由于想創(chuàng)建游戲(應該只是創(chuàng)建游戲,而不是編寫游戲引擎),Chris選擇了他最喜歡的公開發(fā)行的游戲引擎——一個稱為Unity3D的優(yōu)秀小工具,并開始制作一些游戲。
經(jīng)過一段時間的獨立開發(fā)游戲,Chris遺憾地決定,這條特定的職業(yè)道路并不適合他,但他在短短幾年內(nèi)積累的知識,以大多數(shù)人的標準來看,令人印象深刻,他喜歡利用這些知識幫助其他開發(fā)人員創(chuàng)建作品。從那以后,Chris編寫了一本關于游戲物理的教程(Learning Game Physics with Bullet Physics and OpenGL,Packt Publishing)和兩本關于Unity性能優(yōu)化的書籍。他娶了他一生的摯愛Jamie,并在加州圣馬特奧市的Jaunt公司(這是一家專注于提供VR和AR體驗(如360視頻)的虛擬現(xiàn)實/增強現(xiàn)實初創(chuàng)公司)工作,研究最酷的現(xiàn)代技術,擔任測試領域的軟件開發(fā)工程師(SDET)。
工作之余,Chris一直苦惱于對棋盤游戲的沉迷(特別是《太空堡壘:卡拉狄加與血腥狂怒》),他癡迷于暴雪的《守望先鋒》和《星際爭霸2》,專注于Unity版本,經(jīng)常在紙上勾畫關于游戲的構思。不久的將來,當時機成熟的時候(當他不再懈怠時),相信他的計劃就會實現(xiàn)。