我正在创建一个统一项目,该项目将附加到我的网站上。由于它在我的网络上,因此我正在尽我所能或不知道如何对其进行优化。 我不知道是否在方法中创建的所有变量都被销毁/删除,然后程序完成了方法。
例如,我有此方法:
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'对象吗?还是会自动销毁?我不希望此类信息不必要地浮动。 它对基本变量(整数,字符串,字符等)也起作用吗?
答案 0 :(得分:2)
Unity不会自动进行垃圾回收Texture2D
,如here,所示,这意味着您应在使用结束时对其调用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;
}