《Unity游戲程序優化設計實戰》詳細闡述了與UIuty優化開發相關的基本解決方案,主要包括檢測性能問題、腳本編寫策略、批處理、藝術資產、物理引擎、動態圖形、內存管理、預制件池內容。
此外,《Unity游戲程序優化設計實戰》還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。
《Unity游戲程序優化設計實戰》適合作為高等院校計算機及相關專業的教材和教學參考書,也可作為相關開發人員的自學教材和參考手冊。
用戶體驗是任何游戲的關鍵組成部分。用戶體驗不僅包括游戲劇情和游戲玩法,還包括圖形運行的流暢程度,與多人服務器連接的可靠性,對用戶輸入的響應程度,以及最終應用文件的大小(因為現在普遍流行應用商店和云下載,超大的安裝文件包可能讓玩家望而卻步)。便宜好用的AAA工業級游戲開發工具(例如Unity)的發布,大大降低了游戲開發行業的進入門檻。當然,玩家期望開發者提供的最終產品的功能和質量每天都在提高。不難想象,今后游戲的每一個方面都可以而且將會受到玩家和評論家的嚴格審查。
游戲性能優化的目標與用戶體驗息息相關。優化效果不佳的游戲可能會導致幀速率降低、死機、崩潰、輸入滯后、加載時間長、運行時行為不穩定、物理引擎故障甚至電池功耗過高(在游戲進入移動設備時代之后,這一點尤其重要)。上述問題中的任何一項都有可能變成游戲開發人員最糟糕的噩夢,因為盡管總體來說我們已經做得足夠好,但評論往往會集中在我們做得不好的一件事情上。
所謂“性能優化”就是充分利用可用資源,這些資源包括CPU資源(例如CPU周期和主內存空間)、圖形處理單元(GPU)資源(例如顯存VRAM和內存帶寬)等。但是,性能優化還意味著確保沒有單個資源在不適當的時間造成瓶頸,并且優先處理優先級最高的任務。即使是很小的、間歇性的卡頓,也很容易使玩家退出體驗,打破沉浸感,并限制了我們創造預期體驗的潛力。
決定何時退后一步并停止提高性能也很重要。在時間和資源無限的世界中,總會有另一種方法可以使游戲變得更好、更快或更易于維護。開發人員能夠擁有無限的時間和資源嗎?不能。所以我們要懂得在一定的程度適可而止,在開發過程中既要確保產品達到可接受的質量水平,又不能無限度地追求進一步的改變和提升,事實上,有些改變幾乎不會帶來任何明顯的好處。
克里斯·迪金森(Chris Dickinson),在英國長大,對科學、數學和電子游戲充滿熱情。他于2005年從利茲大學獲得電子學物理學碩士學位,然后立即前往加利福尼亞在硅谷中心從事科學研究。由于發現該職業道路不合適,他開始在軟件行業工作。
在過去的十年中,他一直從事軟件開發工作,成為一名高級軟件開發人員。Chris主要從事軟件自動化和內部測試工具開發,但是他對視頻游戲的熱情從未完全消失。2010年,他通過完成第二個學位(游戲和模擬編程的學士學位),探索了游戲開發和3D圖形的秘密。他撰寫了有關游戲物理學的教學圖書(Learning Game Physics with Bullet Physics and Open GL,由Packt Publishing出版)。他目前仍在從事軟件開發工作,在業余時間,則喜歡使用Unity3D等工具創建獨立的游戲項目。
第1章 檢測性能問題
1.1 關于UnityProfiler
1.1.1 啟動Profiler
1.1.2 Profiler窗口
1.2 性能分析的最佳方法
1.2.1 驗證場景中是否存在目標腳本
1.2.2 驗證腳本在場景中出現的次數
1.2.3 盡量減少對正在進行的代碼的更改
1.2.4 最小化內部干擾
1.2.5 最小化外部干擾
1.3 代碼段的目標性能分析
1.3.1 關于Profiler的腳本控制
1.3.2 自定義CPU性能分析
1.4 保存和加載Profiler數據
1.4.1 保存Profiler數據
1.4.2 加載Profiler數據
1.5 關于性能優化和分析的最終思路
1.5.1 了解Profiler
1.5.2 減少噪聲
1.5.3 聚焦問題
1.6 小結
第2章 腳本編寫策略
2.1 緩存組件引用
2.2 使用最快的方法獲取組件
2.3 刪除空的回調聲明
2.4 在運行時避免使用Find()和SendMessage()方法
2.4.1 靜態類
2.4.2 單例組件
2.4.3 分配對現有對象的引用
2.4.4 全局消息系統
2.5 禁用未使用的腳本和對象
2.5.1 按可見性禁用對象
2.5.2 按距離禁用對象
2.6 考慮使用距離平方值
2.7 避免從GameObject中檢索字符串屬性
2.8 更新和協程問題
2.9 考慮緩存Transform值的更改
2.10 更快的GameObject空引用檢查
2.11 小結
第3章 批處理的好處
3.1 繪制調用
3.2 材質和著色器
3.3 動態批處理
3.3.1 頂點屬性
3.3.2 均勻縮放
3.3.3 動態批處理小結
3.4 靜態批處理
3.4.1 靜態標志
3.4.2 內存需求
3.4.3 材質引用
3.4.4 靜態批處理注意事項
3.4.5 靜態批處理小結
3.5 小結
……
第4章 快速啟動藝術資產
第5章 更快的物理引擎
第6章 動態圖形
第7章 精通內存管理
第8章 提示和技巧