unity3d 如何将RenderTexture转换为1D数组?

yh2wf1be  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(163)

我以为我会立刻在某个地方找到答案,但显然不是。所以下面是:
我需要在Unity的脚本(C#)中为每个帧更新将一个RenderTexture转换为一个1D数组。我该怎么做呢?
实际上就是这样。剩下的就不属于问题的重点了,但让我解释一下为什么我需要这样做:...这样我就可以在.csv文件中转储一行单元格内的一维数组。我会在每次帧更新时收集数据(包括渲染的纹理数据),并使用WriteLine(行)写入所有这些收集的每帧数据。我的想法是,这将保存我浪费的计算时间,否则我将花费在编码图像和每次更新时将这些图像保存为单独的文件上。

r8uurelv

r8uurelv1#

在这方面,RenderTexture和底层的Texture对象没有太多的工作要做。因此,我们的想法是将RenderTexture中的数据记录为一个新的Texture2D,并使用这个新项来读取您要查找的数据。
下面是一段代码,它应该读取类型为Color32 struct的一维数组(未测试):

public Color32 [ ] GetRenderTexturePixels ( RenderTexture renderTexture )
{
    var texture = new Texture2D( renderTexture.width, renderTexture.height, TextureFormat.RGB24, false );
    // record the current render texture.
    var currentRenderTexture = RenderTexture.active;

    // Set the new render texture.
    RenderTexture.active = renderTexture;
    texture.ReadPixels ( new Rect ( 0, 0, renderTexture.width, renderTexture.height ), 0, 0 );
    texture.Apply ( );

    // reapply the previous render texture.
    RenderTexture.active = currentRenderTexture;

    // Return then texture2d pixels. This assumes mipmap level 0.
    return texture.GetPixels32 ( );
}

相关问题