본문 바로가기

Unity/팁

[Unity 유니티] 유니티 내에서 스크린샷 찍기 - Recorder

유니티 내에서 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. 게임을 시작한 뒤 스페이스 바를 누르면 스크린샷이 찍힙니다.