我正在創建一個我將附加到我的網站上的統一項目。因為它在我的網站上,所以我正在嘗試盡可能多地優化我的代碼或知道如何詢問它。我不知道是否在方法中創建的所有變量都被銷毀/刪除然后程序完成該方法。例如我有這個方法:Texture2D TakePhoto(){ var currentRT = RenderTexture.active; RenderTexture.active = photoCamera.targetTexture; photoCamera.Render(); Texture2D image = new Texture2D(photoCamera.targetTexture.width, photoCamera.targetTexture.height); image.ReadPixels(new Rect(0, 0, photoCamera.targetTexture.width, photoCamera.targetTexture.height), 0, 0); image.Apply(); RenderTexture.active = currentRT; return image;}我應該在方法結束時手動銷毀“currentRT”對象嗎?還是會自動銷毀?我不希望這種信息無謂地四處傳播。它也適用于基本變量:整數、字符串、字符等嗎?
1 回答

阿波羅的戰車
TA貢獻1862條經驗 獲得超6個贊
Unity 不會自動進行垃圾收集Texture2D,如此處所示,這意味著您應該Destroy()在使用結束時調用它。
但是,在這種情況下,您可能應該通過引用實例化它,以防止浪費內存,因為您不能在最后銷毀,因為您要返回它。
這是一個固定的方法:
Texture2D TakePhoto(ref Texture2D tex)
{
var currentRT = RenderTexture.active;
RenderTexture.active = photoCamera.targetTexture;
photoCamera.Render();
tex = new Texture2D(photoCamera.targetTexture.width, photoCamera.targetTexture.height);
tex.ReadPixels(new Rect(0, 0, photoCamera.targetTexture.width, photoCamera.targetTexture.height), 0, 0);
tex.Apply();
RenderTexture.active = currentRT;
}
- 1 回答
- 0 關注
- 87 瀏覽
添加回答
舉報
0/150
提交
取消