美文网首页
用unity保存相机渲染结果为图片

用unity保存相机渲染结果为图片

作者: voif | 来源:发表于2017-10-29 15:52 被阅读0次

    转载请注明来源

    起因
    mobile做特效费资源,是不是可以用unity做好特效再保存为图片动画使用呢?

    思路
    使用相机,rendertexture,io来保存特效图片

    建议
    开发者自己实现观察者再每一次控制动画的变量变换后从rendertexture创建一个texture2D,保存成列表
    最后一起保存到文件,再根据需要调整或者删除这些得到的图片

    截图

    EFX0.png image.png image.png

    代码
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;

    public class SaveRenderTexture : MonoBehaviour
    {

    public RenderTexture target;
    
    int index = 0;
    
    private void Start()
    {
        GameObject.Find("SaveBtn").GetComponent<Button>().onClick.AddListener(()=> {
            OnUserSave();
        });
    }
    
    public void OnUserSave()
    {
        var prePath = Application.dataPath.Substring(0, Application.dataPath.LastIndexOf("/"));
        string path = prePath + string.Format("/SaveFX/EFX{0}.png",index);
        Save(path, CreateFrom(target));
        index++;
    }
    
    public void Save(string path, Texture2D texture2D)
    {
        Debug.Log("Save Path:" + path);
        var bytes = texture2D.EncodeToPNG();
        //var bytes = texture2D.EncodeToJPG();
        System.IO.File.WriteAllBytes(path, bytes);
    }
    
    public Texture2D CreateFrom(RenderTexture renderTexture)
    {
        Texture2D texture2D = new Texture2D(renderTexture.width, renderTexture.height, TextureFormat.ARGB32, false);
        var previous = RenderTexture.active;
        RenderTexture.active = renderTexture;
    
        texture2D.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
    
        RenderTexture.active = previous;
    
        texture2D.Apply();
    
        return texture2D;
    }
    

    }

    相关文章

      网友评论

          本文标题:用unity保存相机渲染结果为图片

          本文链接:https://www.haomeiwen.com/subject/vduypxtx.html