前言
在Unity3D中,截图功能是开发过程中常用的实用功能之一。通过截图功能,开发者可以在游戏或应用程序中捕捉当前屏幕的图像,并将其保存为图片文件。这里我们说两种实现方式,可以根据需要选择合适的方式。
一、使用ScreenCapture.CaptureScreenshot方法来截图。
using System.IO;
using UnityEngine;
public class Test : MonoBehaviour
{
//文件名(时间戳)
string fileName;
//文件路径
string filePath;
void Start()
{
filePath = Application.dataPath + "/../SaveData/";//保存到根目录下的SaveData文件夹
if (Directory.Exists(filePath) == false)//如果没有找到这个文件夹就创建一个
{
Directory.CreateDirectory(filePath);
}
fileName = System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");
//CameraCapture(Camera.main);
TakeScreenshot();
}
public void TakeScreenshot()
{
// 截图保存的路径,可以自定义
string path = filePath + fileName + ".png";
// 截图,传入文件名和路径
ScreenCapture.CaptureScreenshot(path);
Debug.Log("Screenshot saved to: " + path);
}
}
二、获取当前相机渲染来实现
using System.IO;
using UnityEngine;
public class Test : MonoBehaviour
{
public float picWidth = 1920f;
public float picHeight = 1080f;
//文件名(时间戳)
string fileName;
//文件路径
string filePath;
void Start()
{
filePath = Application.dataPath + "/../SaveData/";//保存到根目录下的SaveData文件夹
if (Directory.Exists(filePath) == false)//如果没有找到这个文件夹就创建一个
{
Directory.CreateDirectory(filePath);
}
fileName = System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");
CameraCapture(Camera.main);//这里也可以是其他相机
}
/// <summary>
/// 截取图片
/// </summary>
/// <param name="m_Camera"></param>
/// <param name="filename"></param>
///
Texture2D t2d;
void CameraCapture(Camera m_Camera)
{
RenderTexture rt = new RenderTexture((int)picWidth, (int)picHeight, 16);
m_Camera.targetTexture = rt;
m_Camera.Render();
RenderTexture.active = rt;
Texture2D t = new Texture2D((int)picWidth, (int)picHeight);
t.ReadPixels(new Rect(0, 0, t.width, t.height), 0, 0);
t.Apply();
t2d = t;
//数据保存路径
string path = filePath + fileName + ".png";
System.IO.File.WriteAllBytes(path, t.EncodeToJPG());
m_Camera.targetTexture = null;
}
}
总结
这两种方法都可以实现截图功能,各有优劣,第一种比较简洁,不过截图的分辨率是当前窗口的分辨率,第二种则是可以手动设置截图的分辨率。