Files
EnglewoodLAB/Assets/Scripts/UVC/Util/ScreenCapture.cs

72 lines
2.6 KiB
C#

using UnityEngine;
namespace UVC.Util
{
/// <summary>
/// 화면 캡처를 위한 유틸리티 클래스입니다.
/// 지정된 카메라 또는 화면 전체를 캡처하여 Texture2D로 반환합니다.
/// </summary>
public static class ScreenCapture
{
/// <summary>
/// 화면을 캡처하여 Texture2D로 반환합니다.
/// 대상 카메라가 RenderTexture를 사용하는 경우 해당 크기로 캡처하며,
/// 그렇지 않은 경우 화면 전체를 캡처합니다.
/// </summary>
/// <returns>캡처된 Texture2D 객체</returns>
/// <example>
/// <code>
/// // 화면 캡처 실행
/// Texture2D capturedImage = ScreenCapture.GetScreenShot(GetComponent<Camera>());
/// if (capturedImage != null)
/// {
/// Debug.Log("화면 캡처 성공!");
/// // 캡처된 이미지를 파일로 저장하거나 UI에 표시 가능
/// }
/// else
/// {
/// Debug.LogError("화면 캡처 실패: 대상 카메라가 설정되지 않았습니다.");
/// }
/// </code>
/// </example>
public static Texture2D GetScreenShot(Camera camera)
{
if (camera == null) return null;
if (camera.targetTexture != null)
{
Texture2D screenShot = new Texture2D(camera.targetTexture.width, camera.targetTexture.height, TextureFormat.RGB24, false);
screenShot.wrapMode = TextureWrapMode.Clamp;
RenderTexture rt = camera.targetTexture;
camera.Render();
RenderTexture.active = rt;
screenShot.ReadPixels(new Rect(0, 0, camera.targetTexture.width, camera.targetTexture.height), 0, 0);
screenShot.Apply(false);
RenderTexture.active = null;
return screenShot;
}
else
{
Texture2D screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
screenShot.wrapMode = TextureWrapMode.Clamp;
RenderTexture rt = new RenderTexture(Screen.width, Screen.height, 24);
camera.targetTexture = rt;
camera.Render();
camera.targetTexture = null;
RenderTexture.active = rt;
screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
screenShot.Apply(false);
RenderTexture.active = null;
return screenShot;
}
}
}
}