Unite’17 開發者大會經驗分享

Spring5211發表於2017-05-16

Unite’17 開發者大會經驗分享

有幸能夠來參加一次Unite開發者大會,博主的實際工作經驗也就一年的時間,大會上的很多東西都在開發中不曾涉及過、或者是因為行業的區別沒有涉及過,但是將大會上學習到的其他經驗列舉出來給自己梳理一個努力的方向,也希望能夠幫助到沒有參加到大會的其他Unity程式設計師,大牛可以多加指點。

Keynote專場:

在KeyNote專場中,Unity官方人員主要介紹了新版Unity的新特性,以及他們針對Unity底層所做過的優化,新版Unity5.6以後的版本,渲染效能、效果都有所提升,而且針對UGUI做了更多的優化和擴充,使得基於UGUI的2D遊戲開發更加的便捷,以及功能更加強大的TimeLine工具,具體的更新內容大家可以去unity官網檢視。

在參加兩天的大會之後,博主發現很多公司都是一直在更新Unity引擎的版本,可能大公司因為穩定性的問題或是對低版本熟練的問題,某些遊戲的開發可能是使用了低版本的Unity引擎,比如《王者榮耀》《龍之谷》,但是在大會上他們都有表示會將引擎升級至5.x以後的更新版本,因為更新版本的會有更好的效能優化和功能擴充,使得開發者有更多的精力去集中於創新功能、玩法的實現,而不是專注於外掛的開發和效能的優化。

Keynote專場告訴我們一個道理,在允許的條件下,一定要使用他們的最新版本,這樣才能讓你更加專注於產品的開發,而非引擎本身。

案例分享專場

A.基於Unity5的次世代卡通渲染技術: 琪亞娜·極樂淨土

很短的視訊很炫麗的《琪亞娜·極樂淨土》利用N多頂級Shader。

B.在遊戲引擎的VR環境中探索視聽語言

一段很感性的經驗分享。

C.成熟專案優化經驗分享
1.資源控制
1.1 動作
刪除相同關鍵幀,自定義關鍵幀壓縮
1.2 特效
監控ParticleSystem和動畫的數量
1.3 UI
a.按需區分圖集,平衡共有圖集數量和使用率
b.拆分alpha,對於沒有漸變過度的alpha圖進行尺寸壓縮
2.記憶體控制
2.1 protobuf優化
a.多執行緒序列化反序列化
b.減少協議數量,減低反射記憶體消耗
2.2 表格二進位制化
a.前期大約20mb table 使用txt讀取解析
b.使用binary讀取可以節省一半執行時記憶體
c.string使用的intern處理
d.共享儲存相同的資料結構
e.減少再次索引的數量,dictionary,quene等
3.控制DrawCall
a.合併場景材質,減少靜態物體的Draw Call
b.合併任務Mesh
c.特效分層顯示,設定layer
d.裁剪控制,鏡頭控制,Occlusion Culling 
4.UI優化
4.1 優化Panel,調整層級順序,動靜分離,降低DrawCall
4.2 針對飄子特別優化
a.控制飄字頻率,減少UIMesh的動態更新
b.控制飄字的最大數量
5.減少更新
5.1 Unity Animator Optimize Game Object
5.2 及時減少不必要的Update
a.Animator
b.ParticleSystem
5.3 減少BillBoard和Amimation和Update的操作
6.優化渲染效率
6.1 按需重寫預設的Shader
6.2 優化複雜的Shader
a.複雜特效的Shader需要圖形程式或者TA特別優化(去除cutout,合併blend,優化指令)
b.使用數學手段
c.使用shaderlod顯示不同的效果,按機型使用vertex light和pixel light
7.減少卡頓
7.1 載入
a.使用載入佇列
b.人物分幀非同步載入
c.平衡預載入與及時載入的數量和大小
d.小心其他操作對載入的影響
e.與ab解除安裝的衝突
7.2 寫出
a.大量資料的一次性寫出
D.王者技術修煉<王者榮耀>

主要是針對《王者榮耀》狀態同步VS幀同步、網路、效能優化進行講解。

狀態同步VS幀同步

1.狀態同步優點:

a.安全性非常高
b.另外狀態同步對於網路的頻寬和抖動包有一個更強的適應能力它的斷線重回比較快
c.客戶端效能優化也,客戶端在做效能優化的時候,可以做裁剪,避免不必要的渲染

2.狀態同步缺點:

a.開發效率要相對幀同步差一些,除錯周期比較長,想要達到優化好的水平,也是比較難的。
b.它比較難做出動作類遊戲打擊感和精確性。因為某些功能(射擊)會在短時間內消耗大量運算效能
c.會隨著遊戲的複雜度,角色的多少,流量也會逐漸增長。

3.幀同步優點:

a.開發效率比較高
b.另外它的打擊感確實比較強
c.流量消耗是穩定的

4.幀同步缺點:

a.網路要求比較高
b.斷線重回時間很長
王者榮耀效能優化
a.避免使用反射
b.避免使用SetActive,用layer代替
c.減少拆箱裝箱操作
d.Unity官方推薦CG每幀200位元組
e.控制DrawCall,畫面裁剪
f.UI複雜使用3DUI,不適用UGUI,比如血條等
g.減少IO
h.表現與邏輯分離,邏輯可以利用C++,進一步降低GC消耗
i.建立自己的記憶體管理,物件管理,重新實現容器類,甚至是反射功能

總結:

大會雖然不會給開發者帶來實質性的提升,但是它卻可以給我們指明一條努力前進的道路。

相關文章