Unity引擎資源管理模塊知識Tree

Unity的資源管理是一個比較寬泛的知識體系,包含了內存、加載、AssetBundle、熱更新等方面。選擇任何一個方向都可以找到很多內容,那麼面對市面上衆多的參考資料,我們又該從何入手呢?本文結合UWA學堂以及Blog的文章整理彙總了《Unity引擎資源管理模塊知識Tree》,分爲“內存管理”、“本地資源檢測”、“打包與熱更新”、“資源組織”、“加載模塊”以及“UWA工具篇”六大類。

 

無論對於從業者還是正在讀大學的技術萌新,學習的有效時間和個人時間都是有限的。高效學習者最在意的是時間的價值,一個需要體系化的知識地圖就顯得尤爲重要。爲此,我們也推出過《Unity引擎渲染模塊知識Tree》和《UI開發與優化知識Tree》,歡迎大家按照自己的興趣和需要參考取閱。


一、內存管理

《Unity引擎加載模塊和內存管理的量化分析及優化方法》

 

Unity引擎的資源加載和內存管理一直是項目開發的重中之重。對此,我們從定性和定量兩方面來分析各種資源的加載耗時及其對於內存的影響。通過本次報告,我們希望通過研發團隊可以對加載模塊和內存使用達到一個全面的、數字化的認識,從而達到高效定位和優化相關的性能問題。


《移動遊戲加載性能和內存管理全解析》

 

基於UWA測評過的大量性能數據,我們對項目運行時的加載模塊和內存模塊進行了全方位的解析。結合大量的實際案例,讓大家瞭解和掌握加載模塊和內存模塊在開發過程中需要注意的核心問題和相應的解決方案,主要包括:

  • 如何提升場景切換效率
  • 如何完善運行時的資源管理
  • 如何快速定位內存瓶頸
  • 如何快速查找內存泄露

《深度剖析PersistentManager.Remapper內存佔用》


遊戲的內存佔用一直是困擾大家很久的問題。大部分是由於資源過多過大、資源格式使用不當等問題導致的,這個改起來的效果立竿見影,然而有些遊戲則是相當重度:海量資源、各種玩法......僅僅靠撿漏資源格式來判斷是否壓縮、尺寸過大等方面還不足以達到理想的效果,我們需要權衡各個方面來優化內存。

 

本課程描述了一個完善的AssetBundle模塊規劃,從而降低內存佔用。通過學習,你將瞭解到降低內存佔用的新方法。


《Unity的GC優化原理及實踐》


堆內存管理是一個讓人頭疼的問題,貫穿遊戲開發和功能迭代過程的始終。本課程圍繞堆內存的內存優化,將這個問題進行細分,包括內存結構、容器、對象池、不安全代碼,由淺入深地講解內存優化的原理和技巧,並提供了Protobuf優化和字符串操作優化等案例。使用結構代替類、緩存對象和使用非託管堆等重要技巧是本課程的重點,非常適合大家提升內存優化方面的工作技能,對GC感興趣的同學們不要錯過啊。


《遊戲開發:Unity中Lua造成的堆內存泄露問題》


Lua的使用存在造成C#堆內存泄漏的問題。本文作者舉了三種項目中的Lua變量沒有被LuaGC掉的情況並給出了問題分析及應對方案。

  • Lua對象是全局變量,直接放在_G中
  • Lua對象被一些全局的Table引用
  • Lua對象的function字段被賦值給了C#的事件/委託

通過修改,Lua引用已經Destroy對象導致的堆內存泄露問題基本上修復完畢,最後可通過自己的使用的工具來驗證和定位問題。


《Lua性能優化—Lua內存優化》

本文是作者結合自身在Lua性能方面優化的一些經驗,主要是和大家分享拿到原始數據後,如何處理過濾數據、信息的經驗,從而更快更準確地定位問題。文中用到的技術並不難懂,相信大家能夠快速掌握。

Lua中可回收的對象遞歸關係

 


《性能優化,進無止境——內存篇(上)》
《性能優化,進無止境——內存篇(下)》
無論是遊戲還是VR應用,內存管理都是其研發階段的重中之重。上篇主要從資源內存佔用、引擎模塊自身內存佔用和託管堆內存佔用三部分展開對內存開銷的解釋;下篇主要從內存泄露、Mono無效堆內存開銷和資源冗餘三部分展開對內存分配的解釋。優化永遠沒有統一的標準方案,只有最適合你項目的方案,希望大家可以活學活用,不要放過任何一處讓你感覺“不對勁”的地方。


二、本地資源檢測

《自動化規範Unity資源的實踐》

在項目開發過程中,制定合理的資源規範,力求在不犧牲畫面表現的同時,有更小的包體、內存佔用和更好的性能。在制定了規範之後,又該如何保證規範不是一紙文檔,而是被真正落地?

本課程重點介紹了作者在開發中積累的一種實踐方案,採用導入器和日報工具的方式來自動化的確保規範被執行。此外還闡述了形成這些規範的過程中的一些思路。

 

《Jenkinsfile基礎與UWA本地資源檢測組件接入實戰》
本課程是UWA本地資源檢測組件接入的配套課程,先從Jenkinsfile的基礎語法、編排和參數構建方法講起,帶您掌握Jenkinsfile的聲明式流水線語法,駕馭Jenkins工作流,最終您可以快速進入UWA本地資源檢測組件接入的應用實戰。當然Jenkinsfile的應用十分廣泛,您也可以應用到其他領域,簡化工作流程,提高效率。

 


三、打包與熱更新

《Jenkins自動化打包詳解》

自動化研發流程在目前各大團隊都有很大的需求,Jenkins是大部分研發團隊的首選。本課程系統地講解了Jenkins的搭建方法和使用方法,課程附帶工程文件和源碼,可以讓研發團隊快速上手。

 


《成熟的Unity熱更新以及版本管理的解決方案》

熱更新是遊戲開發中非常重要的基礎功能,但實際操作中,卻是一件麻煩事。版本號的管理、更新包的打包方式、檢測方式、冗餘的控制……有很多的細節需要考慮。本文作者結合實際上線項目的經驗,與您分享每個關鍵點的決策、備選方案的取捨過程、以及操作技巧。如果您正在學習熱更新技術、或是在遊戲開發中碰到這類問題,本課程將是您事半功倍的好選擇。

 


《Unity項目熱更新技術的性能分析總結》

針對主流熱更新技術(基於C#和Lua)進行性能對比,以期讓開發者找到最適合項目自身的應用方案和實現技巧。內容主要包括:

  • 主流熱更新技術簡介
  • 各方案原理、性能對比、適用場景
  • Lua性能瓶頸分析及其優化技巧


四、資源組織

1. AssetBundle
《揭開AssetBundle廬山真面目(一)》
《揭開AssetBundle廬山真面目(二)》

(一)講解Unity 4.x版本下AssetBundle的依賴性打包功能,來實現更新資源過程中的局部更新;(二)繼續前面的話題,講解Unity 5.x及其以後版本。

 


《給調皮的AssetBundle加上面向對象式加載調試管理》

本文從加載、調試、異步、垃圾回收、路由5個方面,介紹了基於面向對象思想設計的用來進行AssetBundle加載的Resource Module管理器。

 


《你應該知道的AssetBundle管理機制》

本文從管理機制的角度出發,介紹了其資源加載和卸載的原理。最後還給出了UWA在API選擇上的推薦方案。


《Unity 5.x AssetBundle零冗餘解決方案》

筆者參考Unity官方介紹資源管理機制和Unity序列化的一些文章做的AssetBundle打包相關的優化,成功實現了零冗餘打包,非常落地的實踐經驗供大家參考。

 


《Unity AssetBundle高效加密案例分享》

本文講解AssetBundle的安全問題,如何對資源進行加密,主要講解了偏移設置的方法,並附上了代碼和演示效果。

 

2. Addressable
《淺談Assets——Unity資源映射》

從Unity引擎Asset和AssetBundle的基本概念講起,並介紹了Assets的識別、引用,以及資源生命週期的基礎概念。


《Resources目錄的優點與痛點》

本文講了Resource和AssetBundles在開發中的優劣勢,以及各自的痛點,又介紹了一種替代方案AssetDataBase。

 


《AssetBundle的原理及最佳實踐》

本文先介紹了AssetBundle的基礎原理,並且講解了從加載AssetBundle到加載Asset的各種過程以及底層API實現等細節內容;隨後討論在實際使用AssetBundles的過程中遇到的問題以及解決方案。


《Addressable Assets System》

Unity在2018版本中推出了Addressable Assets System的預覽版本,並在2019的版本成爲了正式版本,可以用於生產了。本文共分爲五個小節,首先從六個方面介紹了Addressable Assets System,然後講解了Addressable Assets開發週期、內存管理和託管服務,最後介紹了Addressable分析器。

以上四篇屬於Addressable系列的基礎篇,共包含了9個小節,適合Unity開發的初學者。

 


《Addressable進階實用方法》

本課程講解了Addressable使用、框架原理和擴展思路,帶您全方位瞭解Unity的新一代資源管理系統。內容以全面、系統爲特點,不僅講解細緻、反覆推敲,而且附贈源碼。如果您是初級開發者,可以先對以上四篇內容進行學習,供您完成進階。


《Addressable系統解析及實踐經驗》

本課程通過對Addressable System的源碼解讀,帶着大家理解Addressable系統的實現,並結合作者在項目中的實踐經驗,全面講解Assets資產的加載、釋放、配置管理等功能,有助於您快速深入瞭解Addressable系統,瞭解項目實戰的思路和方法,附贈Demo工程源碼。

 


五、加載模塊

《Unity加載模塊深度解析——紋理篇》

 

《Unity加載模塊深度解析——網格篇》

 

《Unity加載模塊深度解析——Shader篇》

 

《Unity加載模塊深度解析——動畫資源》

 

以上四篇是關於加載模塊的深度解析,以紋理、網格、Shader和動畫四個方面展開描述,根據每種資源進行具體實驗展示並進行分析給出優化建議,以期讓大家對項目的加載效率有更加深入的認知,並提升對加載模塊的掌控能力。


六、UWA工具篇

Pipeline——本地資源檢測
《New | UWA本地資源檢測正式上線》

研發團隊通過簡單的部署,就可以把人力從繁冗複雜的操作中解放出來,自動化檢測項目的資源、代碼和一些設置問題,提高研發效率。

 

雲端測試產品——在線AssetBundle檢測
《這一次,喫透你項目中的每個資源!》

反饋資源的使用情況,包括具體資源信息、依賴關係和冗餘程度等,優化資源量過大、包體過大的問題,並且有效提升加載資源的效率。

 

以上是就是本期爲大家梳理的Unity引擎資源管理模塊知識Tree,作爲體系化的知識,我們希望大家能掌握背後的邏輯與原理,結合學習方法論並反覆實踐,能夠在自己的項目中更高效地進行資源管理。同時也歡迎大家向我們投稿,交流行業內的技術知識。


 

掃描上方二維碼即可下載“在理”APP,學堂課程在線看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章