Unity 游戲程序優化設計實戰
內容描述
本書詳細闡述了與Unity優化開發相關的基本解決方案,主要包括檢測性能問題、
腳本編寫策略、批處理、藝術資產、物理引擎、動態圖形、內存管理、預製件池內容。
此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。
本書適合作為高等院校電腦及相關專業的教材和教學參考書,也可作為相關開發人員的自學教材和參考手冊。
目錄大綱
目 錄
第1章檢測性能問題 1
1.1關於Unity Profiler 1
1.1.1啟動Profiler 2
1.1.2 Profiler窗口 6
1.2性能分析的最佳方法 11
1.2.1驗證場景中是否存在目標腳本 12
1.2.2驗證腳本在場景中出現的次數 13
1.2.3盡量減少對正在進行的代碼的更改 14
1.2.4最小化內部干擾 14
1.2.5最小化外部干擾 15
1.3代碼段的目標性能分析 16
1.3.1關於Profiler的腳本控制 16
1.3.2自定義CPU性能分析 18
1.4保存和加載Profiler數據 22
1.4.1保存Profiler數據 22
1.4.2加載Profiler數據 26
1.5關於性能優化和分析的最終思路 29
1.5.1了解Profiler 30
1.5.2減少噪聲 30
1.5.3聚焦問題 31
1.6小結 31
第2章腳本編寫策略 33
2.1緩存組件引用 33
2.2使用最快的方法獲取組件 34
2.3刪除空的回調聲明 37
2.4在運行時避免使用Find()和SendMessage()方法 39
2.4.1靜態類 41
2.4.2單例組件 42
2.4.3分配對現有對象的引用 46
2.4.4全局消息系統 48
2.5禁用未使用的腳本和對象 58
2.5.1按可見性禁用對象 58
2.5.2按距離禁用對象 59
2.6考慮使用距離平方值 60
2.7避免從GameObject中檢索字符串屬性 61
2.8更新和協程問題 63
2.9考慮緩存Transform值的更改 67
2.10更快的GameObject空引用檢查 68
2.11小結 69
第3章批處理的好處 71
3.1繪製調用 71
3.2材質和著色器 73
3.3動態批處理 76
3.3.1頂點屬性 77
3.3.2均勻縮放 77
3.3.3動態批處理小結 78
3.4靜態批處理 79
3.4.1靜態標誌 79
3.4.2內存需求 80
3.4.3材質引用 80
3.4.4靜態批處理注意事項 81
3.4.5靜態批處理小結 82
3.5小結 82
第4章快速啟動藝術資產 85
4.1音頻 85
4.1.1加載音頻文件 86
4.1.2編碼格式和質量等級 88
4.1.3音頻性能增強 89
4.2紋理文件 93
4.2.1壓縮格式 94
4.2.2紋理性能增強 95
4.3網格和動畫文件 103
4.3.1減少多邊形數量 103
4.3.2僅導入/計算所需內容 104
4.3.3考慮烘焙動畫 105
4.3.4讓Unity優化網格 105
4.3.5合併網格 106
4.4小結 106
第5章更快的物理引擎 109
5.1物理引擎內部 109
5.1.1物理與時間 110
5.1.2靜態和動態碰撞器 113
5.1.3碰撞檢測 113
5.1.4碰撞類型 114
5.1.5碰撞矩陣 115
5.1.6剛體活動和睡眠狀態 116
5.1.7光線和對象投射 116
5.2物理性能優化 117
5.2.1場景設置 117
5.2.2正確使用靜態碰撞器 118
5.2.3優化碰撞矩陣 119
5.2.4首選離散碰撞檢測 120
5.2.5修改固定更新頻率 121
5.2.6調整最大允許時間步長 122
5.2.7最小化投射和包圍體檢查 122
5.2.8避免使用複雜的網格碰撞器 124
5.2.9避免複雜的物理組件 126
5.2.10讓物理對象睡眠 127
5.2.11修改求解器迭代計數 128
5.2.12優化布娃娃 129
5.2.13掌握使用物理引擎的時機 130
5.2.14考慮升級到Unity 5 131
5.3小結 131
第6章動態圖形 133
6.1分析渲染問題 133
6.1.1對GPU進行性能分析 135
6.1.2幀調試器 137
6.1.3強力測試 138
6.1.4受CPU限制 138
6.2前端瓶頸 141
6.2.1細節級別 142
6.2.2禁用GPU蒙皮 143
6.2.3減少曲面細分 143
6.3後端瓶頸 144
6.3.1填充速率 144
6.3.2內存帶寬 154
6.3.3關於VRAM限制 157
6.4照明和陰影 158
6.4.1正向渲染 159
6.4.2延遲著色 159
6.4.3頂點照明著色 160
6.4.4實時陰影 160
6.4.5照明優化 160
6.5為移動設備優化圖形 162
6.5.1盡量減少繪製調用 162
6.5.2盡量減少材質數量 162
6.5.3最小化紋理大小和材質數量 163
6.5.4使用正方形和2的冪紋理 163
6.5.5在著色器中使用最低精確度格式 163
6.5.6避免進行Alpha測試 163
6.6小結 164
第7章精通內存管理 165
7.1關於Mono平台 165
7.1.1編譯過程 167
7.1.2手動JIT編譯 168
7.2內存使用優化 168
7.2.1關於Unity內存域 169
7.2.2值類型和引用類型 175
7.2.3數據佈局的重要性 186
7.2.4關於Unity API 187
7.2.5關於foreach循環 187
7.2.6協程 188
7.2.7閉包 189
7.2.8關於.NET庫函數 189
7.2.9臨時工作緩衝區 190
7.2.10對像池 190
7.3預製件池 193
7.3.1可池化的組件 196
7.3.2預製件池系統 199
7.3.3預製件池 201
7.3.4對像生成 202
7.3.5預生成實例 203
7.3.6對象取消生成 205
7.3.7預製件池測試 205
7.3.8預製件池和場景加載 207
7.3.9預製件池小結 207
7.4關於Mono和Unity的未來 208
7.5小結 210
第8章提示和技巧 213
8.1編輯器熱鍵提示 213
8.1.1和GameObject有關的熱鍵 213
8.1.2場景視圖 214
8.1.3數組 214
8.1.4接口 214
8.1.5其他 215
8.2編輯器界面提示 215
8.2.1常規提示 215
8.2.2檢查器視圖 218
8.2.3項目視圖 219
8.2.4分層結構視圖 220
8.2.5場景和遊戲視圖 220
8.2.6播放模式 221
8.3腳本編寫技巧 222
8.3.1常規技巧 222
8.3.2屬性 223
8.3.3記錄日誌 224
8.3.4有用的鏈接 225
8.4自定義編輯器/菜單提示 226
8.5外部提示 227
8.6小結 229