用unity保存相机渲染结果为图片
程序员文章站
2023-12-26 22:47:33
...
转载请注明来源
起因
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;
}
}
推荐阅读