浅谈Unity之保存截图功能

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 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();

   }

}


直接使用即可


相关文章
|
2月前
|
C# 图形学 开发者
【Unity3D实例-功能-镜头】俯视角
本文介绍了Unity中常用的俯视角镜头实现方法,涵盖模型添加、角色Tag设置、摄像机脚本编写及测试运行,帮助开发者快速掌握俯视角在策略与模拟类游戏中的应用技巧。
253 0
|
2月前
|
人工智能 定位技术 C#
【Unity3D实例-功能-移动】通过鼠标点击进行角色移动
本文介绍了如何在Unity中实现鼠标点击控制角色移动的功能。通过安装导航网格、设置地图与角色、烘焙路径及编写脚本,带领读者一步步构建角色自动寻路系统,增强游戏交互体验。
145 0
|
3月前
|
C# 图形学 开发者
【Unity3D实例-功能-移动】复杂移动(Blend Tree方式)
本文介绍了使用Unity中Blend Tree实现角色移动控制的完整教程,涵盖动画器设置、Blend Tree创建、CharacterController组件添加及代码控制,帮助开发者实现流畅自然的角色动画效果。
99 0
|
3月前
|
图形学 开发者
【Unity3D实例-功能-移动】角色移动-通过WSAD(CharacterController方式)
本文介绍了如何在Unity中使用CharacterController组件实现角色灵活移动。内容包括模型准备、动画处理、添加组件、编写移动脚本及测试运行,帮助开发者快速掌握角色控制技巧,打造流畅的游戏体验。
169 0
|
3月前
|
C# 图形学 开发者
【Unity3D实例-功能-移动】角色移动-通过WSAD(Rigidbody方式)
本文介绍了如何在Unity中使用Rigidbody组件实现角色自由移动,包括模型准备、组件添加、脚本编写与测试运行,帮助开发者快速掌握基础角色控制技巧。
195 0
|
3月前
|
C# 图形学
【Unity3D实例-功能-移动】角色移动-通过WSAD(Transform方式)
本文介绍了如何在Unity中实现角色移动功能,使用Transform组件控制角色基础移动,并详细讲解了模型导入、动画设置、动画控制器配置及移动脚本编写等内容,适合Unity初学者学习角色控制的基础知识。
144 0
|
8月前
|
图形学 UED
unity Tab键实现切换输入框功能
该脚本用于简化输入框之间的Tab键切换操作。只需将脚本挂载在InputField上,无需其他设置。脚本通过监听Tab键和Shift键组合,自动选择下一个或上一个可交互的InputField,提升用户体验。
|
定位技术 C# 图形学
从零开始的unity3d入门教程(二)----基本功能讲解
这是一篇Unity3D入门教程,详细介绍了Unity界面操作、游戏物体创建修改、场景搭建、玩家控制、音效添加以及游戏测试和导出的全过程。
从零开始的unity3d入门教程(二)----基本功能讲解
|
机器学习/深度学习 图形学 Windows
小功能⭐️unity3d KeyCode各键值说明
小功能⭐️unity3d KeyCode各键值说明

热门文章

最新文章

下一篇
开通oss服务