我正在创建一个我将附加到我的网站上的统一项目。因为它在我的网站上,所以我正在尝试尽可能多地优化我的代码或知道如何询问它。我不知道是否在方法中创建的所有变量都被销毁/删除然后程序完成该方法。例如我有这个方法: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 关注
- 63 浏览
添加回答
举报
0/150
提交
取消