您当前的位置: 首页 >  unity

染指流年灬

暂无认证

  • 4浏览

    0关注

    194博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity:Texture2D格式和RenderTexture、Texture格式的相互转换

染指流年灬 发布时间:2022-10-13 11:15:55 ,浏览量:4

RenderTexture和Texture2D是继承于Texture类的,它们之间彼此可以进行相互的转换,但不能强转。之前我在做项目的时候就进行强转,强转在代码里是不会报错的,但是运行的时候不能真正转换成功,从而导致没有效果。

下面总结它们彼此相互转换的方法:

编辑器模式下Texture转换成Texture2D
/// 
/// 编辑器模式下Texture转换成Texture2D
/// 
/// 
/// 
private Texture2D TextureToTexture2D(Texture texture) {
    Texture2D texture2d = texture as Texture2D;
    UnityEditor.TextureImporter ti = (UnityEditor.TextureImporter)UnityEditor.TextureImporter.GetAtPath(UnityEditor.AssetDatabase.GetAssetPath(texture2d));
    //图片Read/Write Enable的开关
    ti.isReadable = true; 
    UnityEditor.AssetDatabase.ImportAsset(UnityEditor.AssetDatabase.GetAssetPath(texture2d));
    return texture2d;
}


运行模式下Texture转换成Texture2D
/// 
/// 运行模式下Texture转换成Texture2D
/// 
/// 
/// 
private Texture2D TextureToTexture2D(Texture texture) {
        Texture2D texture2D = new Texture2D(texture.width, texture.height, TextureFormat.RGBA32, false);
        RenderTexture currentRT = RenderTexture.active;
        RenderTexture renderTexture = RenderTexture.GetTemporary(texture.width, texture.height, 32);
        Graphics.Blit(texture, renderTexture);

        RenderTexture.active = renderTexture;
        texture2D.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
        texture2D.Apply();

        RenderTexture.active = currentRT;
        RenderTexture.ReleaseTemporary(renderTexture);

        return texture2D;
}


# 运行模式下Texture转换RenderTexture
  RenderTexture StoreIntoTempTexture(Texture texture)
        {
            if (pauseRenderTexture == null)
            {
                pauseRenderTexture = RenderTexture.GetTemporary(texture.width, texture.height);

            }
            
            Graphics.Blit(texture, pauseRenderTexture);

            return pauseRenderTexture;
        }
关注
打赏
1665909078
查看更多评论
立即登录/注册

微信扫码登录

0.0357s