유니티 내에서 Recorder 기능을 제공하고 있습니다.
이를 이용해 스크린샷을 찍는 방법을 알아보겠습니다.
1. Window - Package Manager 에서 Recorder를 설치합니다.
2. 아래 스크립트를 작성한 뒤 Hierachy에 빈 게임 오브젝트를 만든 후 그 안에 넣어줍니다.
namespace UnityEngine.Recorder.Examples
{
[Serializable]
public class ScreenShotData
{
public string name;
public int width;
public int height;
}
public class CaptureScreenShot : MonoBehaviour
{
RecorderController m_RecorderController;
[SerializeField]
ScreenShotData[] ScreenShotDatas;
private void Setting(string name, int width, int height)
{
string currentTime = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss");
var settings = ScriptableObject.CreateInstance<RecorderControllerSettings>();
m_RecorderController = new RecorderController(settings);
var mediaOutputFolder = Path.Combine(Application.dataPath, "../", "ScreenShot"); // 스크린샷 저장 경로 지정
var imageRecorder = ScriptableObject.CreateInstance<ImageRecorderSettings>();
imageRecorder.name = name;
imageRecorder.Enabled = true;
imageRecorder.OutputFormat = ImageRecorderSettings.ImageRecorderOutputFormat.PNG;
imageRecorder.CaptureAlpha = false;
imageRecorder.OutputFile = Path.Combine(mediaOutputFolder, name + "_" + width + "_" + height);
imageRecorder.imageInputSettings = new GameViewInputSettings
{
OutputWidth = width,
OutputHeight = height,
};
settings.AddRecorderSettings(imageRecorder);
settings.SetRecordModeToSingleFrame(0);
}
private void OnGUI()
{
if (Input.GetKeyUp(KeyCode.Space))
{
for (int i = 0; i < ScreenShotDatas.Length; i++)
{
StartCoroutine(Capture());
}
}
}
IEnumerator Capture()
{
foreach(ScreenShotData data in ScreenShotDatas)
{
Setting(data.name, data.width, data.height);
m_RecorderController.PrepareRecording();
m_RecorderController.StartRecording();
yield return null;
}
}
}
}
3. Inspector 창에서 ScreenShotDatas에 찍을 스크린샷의 해상도를 설정해 줍니다. (여러 개도 가능합니다.)
4. 게임을 시작한 뒤 스페이스 바를 누르면 스크린샷이 찍힙니다.
'Unity > 팁' 카테고리의 다른 글
[Unity 유니티] 유니티 인스펙터 Dictionary 안나옴 - Serializable 직렬화 문제와 해결 방법 (SerializableDictionary) (0) | 2025.01.09 |
---|---|
[Unity 유니티] 메모리 변수 변조 방지 - 치트 엔진 막기 (0) | 2025.01.08 |
[Unity 유니티] Coroutine 코루틴 yield return 최적화 (0) | 2023.08.26 |
[Unity 유니티] Update 를 Coroutine 으로 최적화 하기 (0) | 2023.08.25 |
[Unity 유니티] Api Compatibility Level .Net 4.x 가 없을 때 해결 방법 (0) | 2023.08.25 |