본문 바로가기

[unity] 유니티로 화면 캡쳐, 동영상 녹화 쉽게 하는 방법

앤디가이 2022. 12. 2.

Unity에서 Recorder Package를 통해 Editor에서 게임 플레이 장면을 쉽게 이미지 캡처하고, 게임 화면을 녹화하는 방법을 소개해본다.

 

 

 

 

Unity Recorder란?

기존 플레이 화면을 녹화하기 위해서는 외부 툴을 사용하여 화면을 녹화하거나, 모바일에서 화면을 녹화하는 방법으로 화면을 녹화하는 방법이 일반적이었다. 

이런 수고를 덜어주기 위해 유니티에서 에디터에서 바로 녹화를 가능하게 해주는 패키지를 제작했다.

 

유니티 레코더란

플레이 모드 동안 Unity 에디터에서 레코더로 애니메이션, 동영상, 이미지, 오디오, 임의 출력 변수(AOVs)등과 같은 데이터를 캡처하고 저장할 수 있다.

 

패키지 네임스페이스는 com.unity.recorder 이다.

유니티 2022 버전에서는 현재 recorder 4.0 버전까지 출시되었다.

 

 

Unity Recorder 설치방법

유니티 접속 후 상단 메뉴의 Window -> PackageManager에 접속한다.

왼쪽 상단 드롭다운 중 Pacakage: Unity Registry로 선택 후 Recorder 항목을 검색한다.

 

 

Recorder 항목이 뜨면, 버전 확인 후 설치를 진행해준다.

Unity Recorder
Unity Recorder

 

 

Unity Recorder를 사용하여 동영상 녹화방법

패키지를 설치 완료 후 다음과 메뉴로 진입하여 윈도우를 활성화 해준다.

Window -> General -> Recorder -> Recorder Window

Recorder Window
Recorder Window

Recorder Window가 활성화되면 왼쪽에 +Add Recorder에 마우스 우클릭 -> Movie 클립을 하나 만들어 준다.

Unity Recorder
Unity Recorder

Exit Play Mode 항목에 체크해주면, 유니티 에디터에서 플레이 후 정지를 누르면 녹화가 정지된다.

Capture 부분의 Source 부분을 선택하면 다양한 환경으로 녹화를 할 수 있다.

기본적으로 게임 화면 녹화를 원하면 GameView를 선택하고, 특정 카메라로 녹화를 원하면 해당 카메라를 선택해주면 된다.

Format 항목은 인코딩 되는 코덱을 선택하는 곳이다.

가장 많이 사용되는 H.264의 MP4 항목으로 인코딩하면 된다.

 

Output File은 녹화된 파일이 저장되는 파일 이름과 위치를 선택하는 항목이다.

 

 

Recorder에서 빨간색 플레이 버튼 실행(녹화 실행 및 에디터 실행) -> 에디터 플레이 스탑 순으로 진행하면 자동으로 녹화하고 저장된다.

 

 

Unity Recorder를 사용하여 이미지 캡처 방법

이미지를 캡처하는 방법은 스크립트를 활용하는 게 좋다.

Unity Recorder 패키지가 설치되어 있다면 아래 코드를 생성 후 Scene에 빈 게임 오브젝트에 Attach 해준다.

#if UNITY_EDITOR

using System.IO;
using UnityEditor.Recorder;
using UnityEditor.Recorder.Input;

namespace UnityEngine.Recorder.Examples
{
    public class CaptureScreenShotExample : MonoBehaviour
    {
        RecorderController m_RecorderController;

        void OnEnable()
        {
            var controllerSettings = ScriptableObject.CreateInstance<RecorderControllerSettings>();
            m_RecorderController = new RecorderController(controllerSettings);

            var mediaOutputFolder = Path.Combine(Application.dataPath, "..", "SampleRecordings");

            // Image
            var imageRecorder = ScriptableObject.CreateInstance<ImageRecorderSettings>();
            imageRecorder.name = "My Image Recorder";
            imageRecorder.Enabled = true;
            imageRecorder.OutputFormat = ImageRecorderSettings.ImageRecorderOutputFormat.PNG;
            imageRecorder.CaptureAlpha = false;

            imageRecorder.OutputFile = Path.Combine(mediaOutputFolder, "image_") + DefaultWildcard.Take;

            imageRecorder.imageInputSettings = new GameViewInputSettings
            {
                OutputWidth = 1920,
                OutputHeight = 1080,
            };

            // Setup Recording
            controllerSettings.AddRecorderSettings(imageRecorder);
            controllerSettings.SetRecordModeToSingleFrame(0);
        }

        void OnGUI()
        {
            if (Input.GetKeyUp(KeyCode.Space))
            {
                m_RecorderController.PrepareRecording();
                m_RecorderController.StartRecording();
            }
        }
    }
}

#endif

게임 플레이 중 Space 버튼을 누르면 해당 장면이 스크린샷되어 저장되는 코드이다.

이미지 저장 해상도는 imageRecorder.imageInputSettings 값에 Width,Height 값만 설정해주면 된다.

 

 

 

댓글