使用TryGetComponent取代GetComponent以避免Editor中的內存分配

作爲Unity開發人員,可能或多或少都會遇到過一個常見的Unity的GC分配問題——在Editor中使用GetComponent方法來獲取一個不存在的Component時會分配額外的內存。就像下圖

需要注意的是,這個內存分配只會發生在Editor中。更多相關內容可以查看這篇文章:

https://zhuanlan.zhihu.com/p/26763624

 

但是這裏的內存分配是如何產生的呢?

這是因爲當MonoBehaviour具有字段時,在Editor中Unity不會將這些字段設置爲真正的“null”,而是設置爲表示“null”的僞空對象。如果所請求的Component不存在,則Unity將在新分配的僞空對象內生成一個自定義警告字符串。有關信息,大家可以查看此博客。

https://blogs.unity3d.com/2014/05/16/custom-operator-should-we-keep-it/

不過好消息是,自Unity 2019.2起,Unity添加了可以處理這種情況的新API ——TryGetComponent API。

https://unity.cn/releases/full/2019/2019.2.0

與GameObject.GetComponent相比,一個最大的區別是,當請求的Component不存在時,此方法不會在編輯器中分配內存。下面的屏幕截圖是使用TryGetComponent測試的結果。

 

 

Useful Link:

https://connect.unity.com

https://docs.microsoft.com/zh-cn/learn/?WT.mc_id=DT-MVP-5001664

 

 

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