为了账号安全,请及时绑定邮箱和手机立即绑定

在方法上创建的所有变量都被销毁然后程序完成了吗?

在方法上创建的所有变量都被销毁然后程序完成了吗?

C#
潇湘沐 2022-12-31 10:46:35
我正在创建一个我将附加到我的网站上的统一项目。因为它在我的网站上,所以我正在尝试尽可能多地优化我的代码或知道如何询问它。我不知道是否在方法中创建的所有变量都被销毁/删除然后程序完成该方法。例如我有这个方法: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;

}


查看完整回答
反对 回复 2022-12-31
  • 1 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信