做爲Unity開發人員,可能或多或少都會遇到過一個常見的Unity的GC分配問題——在Editor中使用GetComponent方法來獲取一個不存在的Component時會分配額外的內存。就像下圖編輯器
須要注意的是,這個內存分配只會發生在Editor中。更多相關內容能夠查看這篇文章:測試
https://zhuanlan.zhihu.com/p/267636243d
可是這裏的內存分配是如何產生的呢?對象
這是由於當MonoBehaviour具備字段時,在Editor中Unity不會將這些字段設置爲真正的「null」,而是設置爲表示「null」的僞空對象。若是所請求的Component不存在,則Unity將在新分配的僞空對象內生成一個自定義警告字符串。有關信息,你們能夠查看此博客。blog
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測試的結果。get
https://docs.microsoft.com/zh-cn/learn/?WT.mc_id=DT-MVP-5001664