以下是GPT的回答:
在此代码中,我们使用RenderTexture来捕捉摄像机渲染的图像。使用RenderTexture有两个好处。首先,它允许我们截取摄像机渲染的图像而不是整个屏幕。其次,我们可以通过RenderTexture来读取图像数据,而不是直接从屏幕上读取数据。在Update方法中,我们检测是否按下了S键,如果是,则执行以下操作:
- 创建一个RenderTexture对象,将其设置为当前摄像机的目标纹理。
- 创建一个Texture2D对象,并将RenderTexture对象中的像素数据读取到Texture2D对象中。
- 重置摄像机的目标纹理,销毁RenderTexture对象。
- 将Texture2D对象转换为PNG格式的字节数组,并保存到本地文件中。
请注意,我们将图像保存到应用程序数据文件夹中。这是因为我们无法直接将图像保存到项目文件夹中,必须将其保存到应用程序数据文件夹或其他位置。
using UnityEngine;
using System.IO;public class ScreenShot : MonoBehaviour
{public int captureWidth = 1920;public int captureHeight = 1080;private Camera mainCamera;void Start(){mainCamera = Camera.main;}void Update(){if (Input.GetKeyDown(KeyCode.S)){string fileName = "screenshot.png";string path = Path.Combine(Application.dataPath, fileName);RenderTexture rt = new RenderTexture(captureWidth, captureHeight, 24);mainCamera.targetTexture = rt;Texture2D screenShot = new Texture2D(captureWidth, captureHeight, TextureFormat.RGB24, false);mainCamera.Render();RenderTexture.active = rt;screenShot.ReadPixels(new Rect(0, 0, captureWidth, captureHeight), 0, 0);mainCamera.targetTexture = null;RenderTexture.active = null;Destroy(rt);byte[] bytes = screenShot.EncodeToPNG();File.WriteAllBytes(path, bytes);Debug.Log("Screenshot saved to " + path);}}
}