72 lines
2.1 KiB
C#
72 lines
2.1 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
public class ScreenshotHelper : MonoBehaviour
|
|
{
|
|
public static void Capture()
|
|
{
|
|
if (!Application.isPlaying)
|
|
{
|
|
UnityEngine.Debug.LogWarning("플레이 모드에서만 가능합니다.");
|
|
return;
|
|
}
|
|
|
|
var go = new GameObject("ScreenshotHelper");
|
|
go.hideFlags = HideFlags.HideAndDontSave;
|
|
go.AddComponent<ScreenshotHelper>();
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
StartCoroutine(CaptureCoroutine());
|
|
}
|
|
|
|
private IEnumerator CaptureCoroutine()
|
|
{
|
|
yield return new WaitForEndOfFrame();
|
|
|
|
string projectRoot = Path.GetDirectoryName(Application.dataPath);
|
|
string screenshotFolder = Path.Combine(projectRoot, "ScreenShot");
|
|
if (!Directory.Exists(screenshotFolder))
|
|
Directory.CreateDirectory(screenshotFolder);
|
|
|
|
string fileName = "Screenshot_" + DateTime.Now.ToString("yyyy-MM-dd_HHmmss") + ".png";
|
|
string fullPath = Path.Combine(screenshotFolder, fileName);
|
|
|
|
Texture2D tex = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
|
|
tex.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
|
|
tex.Apply();
|
|
|
|
File.WriteAllBytes(fullPath, tex.EncodeToPNG());
|
|
Destroy(tex);
|
|
|
|
UnityEngine.Debug.Log($"[ScreenshotTool] 스크린샷 저장됨: {fullPath}");
|
|
|
|
// Unity 다이얼로그 띄우기
|
|
bool openFolder = EditorUtility.DisplayDialog(
|
|
"스크린샷 저장 완료",
|
|
$"{fileName}\n파일 위치를 여시겠습니까?",
|
|
"예", "아니오");
|
|
|
|
if (openFolder)
|
|
{
|
|
// 윈도우 탐색기 열기
|
|
Process.Start("explorer.exe", $"/select,\"{fullPath}\"");
|
|
}
|
|
|
|
Destroy(gameObject);
|
|
}
|
|
}
|
|
|
|
public static class ScreenshotTool
|
|
{
|
|
[MenuItem("Tools/Take Screenshot (PlayMode) %#x")]
|
|
public static void TakeScreenshotPlayMode()
|
|
{
|
|
ScreenshotHelper.Capture();
|
|
}
|
|
} |