浅谈Unity之保存截图功能

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 保存截图功能

前言:每日记录自己学习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();

   }

}


直接使用即可


相关文章
|
4月前
|
定位技术 C# 图形学
从零开始的unity3d入门教程(二)----基本功能讲解
这是一篇Unity3D入门教程,详细介绍了Unity界面操作、游戏物体创建修改、场景搭建、玩家控制、音效添加以及游戏测试和导出的全过程。
从零开始的unity3d入门教程(二)----基本功能讲解
|
4月前
|
图形学
小功能⭐️Unity获取场景中所有物体
小功能⭐️Unity获取场景中所有物体
小功能⭐️Unity获取场景中所有物体
|
4月前
|
图形学
小功能⭐️Unity UnityEvent实现代码的选择
小功能⭐️Unity UnityEvent实现代码的选择
|
4月前
|
机器学习/深度学习 图形学 Windows
小功能⭐️unity3d KeyCode各键值说明
小功能⭐️unity3d KeyCode各键值说明
|
4月前
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
4月前
|
图形学
小功能⭐️获取Unity游戏物体上,所挂载组件的名称
小功能⭐️获取Unity游戏物体上,所挂载组件的名称
|
4月前
|
图形学
小功能⭐️Unity截屏功能的实现
小功能⭐️Unity截屏功能的实现
|
4月前
|
图形学
小功能⭐️Unity中Texture2D、Sprite、Texture、RenderTexture、image、byte的转换
小功能⭐️Unity中Texture2D、Sprite、Texture、RenderTexture、image、byte的转换
|
4月前
|
图形学
|
4月前
|
图形学
小功能⭐️解决Unity无法对一个物体上的所有材质球进行更改
小功能⭐️解决Unity无法对一个物体上的所有材质球进行更改

相关实验场景

更多
下一篇
无影云桌面