Unity 保存截图功能

1.下面是实现代码

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class SaveJPG : MonoBehaviour
{
    public GameObject[] gameObjects;
    //string fileName = Application.streamingAssetsPath + "/UI/photo.jpg";
    public Camera camera;
    public Transform fuwutiParent;
    public int jsq = 0;
    public bool zx = false;
    GameObject obj = null;
    
    private void Start()
    {
        //自动保存图片
        //StartCoroutine(CloneTuPian());
    }
    private void Update()
    {
        #region 半自动保存图片手动对位置
        if (Input.GetKeyDown (KeyCode.Space))
        {
            for (int i = 0; i < fuwutiParent.childCount; i++)
            {
                fuwutiParent.GetChild(jsq).gameObject.SetActive(true);
            }           
           
        }
        if (Input.GetKeyDown (KeyCode.Alpha1))
        {
            string str_ = fuwutiParent.GetChild(jsq).name.Split('(')[0].ToString();
            CaptureScreenByRT(str_);
            fuwutiParent.GetChild(jsq).gameObject.SetActive(false);
            jsq++;
            Debug.Log(jsq);
        }
        #endregion
    }

    IEnumerator CloneTuPian()
    {
        while (jsq<gameObjects .Length)
        {
            GameObject obj = Instantiate(gameObjects[jsq]);
            string str_ = obj.transform.name.Split('(')[0].ToString ();
            CaptureScreenByRT(str_);
            Destroy(obj);
            yield return new WaitForSeconds(1f);         
            jsq++;
        }
        Debug.Log("生成结束");
    }
    public void CaptureScreenByRT(string fileName)
    {
        Rect rect = new Rect(0, 0, 600, 600);
        // 创建一个RenderTexture对象  
        RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height, 0);
        // 临时设置相关相机的targetTexture为rt, 并手动渲染相关相机  
        camera.targetTexture = rt;
        camera.Render();
        // 激活这个rt, 并从中中读取像素。  
        RenderTexture.active = rt;
        Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
        // 注:这个时候,它是从RenderTexture.active中读取像素 
        screenShot.ReadPixels(rect, 0, 0);
        screenShot.Apply();
        // 重置相关参数,以使用camera继续在屏幕上显示  
        camera.targetTexture = null;
        RenderTexture.active = null;
        GameObject.Destroy(rt);
        // 最后将这些纹理数据,成一个png图片文件  
        byte[] bytes = screenShot.EncodeToPNG();
        string path = Application.streamingAssetsPath + "/UI/"+ fileName + ".jpg";
        System.IO.File.WriteAllBytes(path, bytes);
        AssetDatabase.Refresh();
    }


}

 

直接使用即可

 

posted @ 2022-11-21 17:34  剑起苍穹  阅读(137)  评论(0编辑  收藏  举报
/*鼠标点击特效*/