Unity 游戲優化, 2/e (Unity 2017 Game Optimization - Optimize all aspects of Unity performance, 2/e)

Chris Dickinson 蔡俊鴻 雷鴻飛譯

  • Unity 游戲優化, 2/e (Unity 2017 Game Optimization - Optimize all aspects of Unity performance, 2/e)-preview-1
  • Unity 游戲優化, 2/e (Unity 2017 Game Optimization - Optimize all aspects of Unity performance, 2/e)-preview-2
  • Unity 游戲優化, 2/e (Unity 2017 Game Optimization - Optimize all aspects of Unity performance, 2/e)-preview-3
Unity 游戲優化, 2/e (Unity 2017 Game Optimization - Optimize all aspects of Unity performance, 2/e)-preview-1

買這商品的人也買了...

商品描述

● 使用Unity Profiler查找程序中任何地方的瓶頸,並發現解決它們的方法。
● 實現C#腳本編寫的更佳實踐,避免常見誤區。
● 深入理解渲染管線,通過減少繪製調用和避免填充率瓶頸來更大化渲染管線的性能。
● 以大多數開發者都能理解的方式增強著色器,通過微妙而有效的性能調整優化它們。
● 充分利用物理引擎使場景盡可能保持動態。
● 組織、過濾並壓縮藝術資源,保持高品質的同時更大化性能。
● 發現VR項目中各種嚴重的性能問題,找到解決它們的方法。
● 使用Mono框架和C#實現底層強化以更大化內存使用,避免垃圾回收。
● 了解項目組織的更佳實踐,通過改進工作流來節省時間。

作者簡介

蔡俊鴻

擁有多年遊戲開發經驗,全程主導多個千萬級IP遊戲的客戶端和服務器開發。
擅長服務器和客戶端的架構設計以及性能優化、客戶端渲染等。
目前就職於崑崙萬維GameArk,擔任技術總監一職。


Chris Dickinson

在英格蘭一個安靜的小角落里長大,對數學、科學,尤其是電子遊戲滿懷熱情。
他喜歡玩遊戲並剖析遊戲的玩法,並試圖確定它們是如何工作的。
Chris在獲得電子物理學的碩士學位後,他飛到美國加州,在矽谷中心的科學研究領域工作。
不久後,他不得不承認,研究工作並不適合他的性格。
在四處投簡歷之後,他找到了一份工作,
最終讓他走上了軟件工程的正確道路(據說,這對於物理學畢業生來說並不罕見)。

Chris是IPBX電話系統的自動化工具開發人員,這段時間的工作更適合他的性格。
現在,他正在研究複雜的設備鏈,幫助開發人員修復和改進這些設備,並開發自己的工具。
Chris學習了很多關於如何使用大型、複雜、實時、基於事件、用戶輸入驅動的狀態機的知識。
在這方面,Chris基本上是自學成才的,他對電子遊戲的熱情再次高漲,促使他真正弄清楚電子遊戲是如何創建的。
當他有足夠的信心時,他回到學校攻讀遊戲和模擬編程的學士學位。
當他獲得學位時,他已經在用C++編寫自己的遊戲引擎(儘管還很初級),並在日常工作中經常使用這些技能。
然而,如果想創建遊戲,應該只是創建遊戲,而不是編寫遊戲引擎。
因此,Chris選擇了他喜歡的公開發行的遊戲引擎——一個稱為Unity3D的優秀小工具-一併開始製作一些遊戲。

經過一段時間的獨立遊戲開發,Chris遺憾地決定,這條特定的職業道路的要求並不適合他,
但他在短短幾年積累的知識量,以大多數人的標準來看,
都令人印象深刻,他喜歡利用這些知識幫助其他開發人員創建作品。
從那以後,Chris編寫了一本關於遊戲物理的教程
(Learning Game Physics with Bullet Physics and OpenGL,Packt Publishing)
和兩本關於Unity性能優化的書籍。
他娶了他一生的摯愛Jamie,並開始在加州聖馬特奧市的Jaunt公司工作,研究酷的現代技術,
擔任測試領域的軟件開發工程師(SDET),
這是一家專注於提供VR和AR體驗(例如360視頻)的虛擬現實/增強現實初創公司。

工作之餘,Chris一直抵抗對棋盤遊戲的沉迷(特別是《太空堡壘:卡拉狄加與血腥狂怒>),
他痴迷於暴雪的《守望先鋒》和《星際爭霸2》,
專注地盯著Unity新版本,在紙上勾畫出一組關於遊戲的構思。

目錄大綱

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.2.6 最小化外部影響
1.2.7 代碼片段的針對性分析
1.3 關於分析的思考
1.3.1 理解Profiler工具
1.3.2 減少干擾
1.3.3 關注問題
1.4 本章小結

第2章 腳本策略
2.1 使用最快的方法獲取組件
2.2 移除空的回調定義
2.3 緩存組件引用
2.4 共享計算輸出
2.5 Update、Coroutines和Invoke Repeating
2.6 更快的Game Object空引用檢查
2.7 避免從Game Object取出字符串屬性
2.8 使用合適的數據結構
2.9 避免運行時修改Transform的父節點
2.10 注意緩存Transform的變化
2.11 避免在運行時使用Find()和Send Message()方法
2.11.1 將引用分配給預先存在的對象
2.11.2 靜態類
2.11.3 單例組件
2.11.4 全局消息傳遞系統
2.12 禁用未使用的腳本和對象
2.12.1 通過可見性禁用對象
2.12.2 通過距離禁用對象
2.13 使用距離平方而不是距離
2.14 最小化反序列化行為
2.14.1 減小序列化對象
2.14.2 異步加載序列化對象
2.14.3 在內存中保存之前加載的序列化對象
2.14.4 將公共數據移入Scriptable Object
2.15 疊加、異步地加載場景
2.16 創建自定義的Update()層
2.17 本章小結

第3章 批處理的優勢
3.1 Draw Call
3.2 材質和著色器
3.3 Frame ebugger
3.4 動態批處理
3.4.1 頂點屬性
3.4.2 網格縮放
3.4.3 動態批處理總結
3.5 靜態批處理
3.5.1 Static標記
3.5.2 內存需求
3.5.3 材質引用
3.5.4 靜態批處理的警告
3.5.5 靜態批處理總結
3.6 本章小結
……

第4章 著手處理藝術資源
第5章 加速物理
第6章 動態圖形
第7章 虛擬速度和增強加速度
第8章 掌握內存管理
第9章 提示與技巧