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

问题描述

我正在创建一个统一项目,我将把它附加到我的网站上。因为它在我的网络上,所以我正在尝试尽可能多地优化我的代码,或者知道如何询问它。我不知道方法中创建的所有变量是否都被销毁/删除然后程序完成该方法。

例如我有这个方法:

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”对象吗?还是会自动销毁?我不希望这种信息不必要地四处飘荡。它也适用于基本变量:整数、字符串、字符等吗?

标签: c#unity3d

解决方案


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;
}

推荐阅读