浅谈Unity之保存截图功能

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

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

   }

}


直接使用即可


相关文章
|
11天前
|
图形学 UED
unity Tab键实现切换输入框功能
该脚本用于简化输入框之间的Tab键切换操作。只需将脚本挂载在InputField上,无需其他设置。脚本通过监听Tab键和Shift键组合,自动选择下一个或上一个可交互的InputField,提升用户体验。
|
5月前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
533 0
|
6月前
|
定位技术 C# 图形学
从零开始的unity3d入门教程(二)----基本功能讲解
这是一篇Unity3D入门教程,详细介绍了Unity界面操作、游戏物体创建修改、场景搭建、玩家控制、音效添加以及游戏测试和导出的全过程。
从零开始的unity3d入门教程(二)----基本功能讲解
|
6月前
|
图形学
小功能⭐️Unity UnityEvent实现代码的选择
小功能⭐️Unity UnityEvent实现代码的选择
|
6月前
|
机器学习/深度学习 图形学 Windows
小功能⭐️unity3d KeyCode各键值说明
小功能⭐️unity3d KeyCode各键值说明
|
6月前
|
数据可视化 图形学
小功能⭐️Unity2018 Shader Graph——全息影像、物体消融
小功能⭐️Unity2018 Shader Graph——全息影像、物体消融
|
6月前
|
图形学
小功能⭐️Unity中利用材质自发光实现物体闪烁效果
小功能⭐️Unity中利用材质自发光实现物体闪烁效果
|
6月前
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
6月前
|
图形学
小功能⭐️Unity Button按钮实现鼠标移入移出触发相应事件
小功能⭐️Unity Button按钮实现鼠标移入移出触发相应事件

热门文章

最新文章