유니티 RenderTexture를 이용한 화면 캡쳐하기

RenderTexture란?

Render Texture는 렌더링 작업에 사용되는 특수 유형의 텍스처입니다.

장면, 개체 또는 후처리 효과를 화면 밖에서 렌더링할 수 있습니다.
 
다양한 영역을 모니터링할 수 있는 보안 카메라 시스템을 만들고 싶을 때 Render Texture을 사용할 수 있습니다. 
 

이번 포스팅에서는 간단하게 해당 장면을 캡쳐한 후 png파일로 폴더에 저장하는 방법에 대해 배워보고자 합니다.


카메라 세팅

 

유니티 MIRROR(거울) 구현하는 방법

빈오브젝트를 하나 생성해준다빈오브젝트 자식으로 quad를 하나 생성해준다스케일을 9: 16으로 설정해주고(입맛대로 변경하면 됨, 단!! Render Texture 해상도도 여기에 맞게 해줘야함) Scale을 줄인다

wlsdn629.tistory.com

 

거울에 비춰질 플레이어

세팅은 위 링크를 참고해주시면 되겠습니다
 
 


해당 화면 이미지 캡쳐하기

위 사진과 같이 카메라 세팅 및 Mirror을 세팅해주면 되겠습니다.

 

위 배치가 맘에 들지 않는다면 본인이 원하시는 대로 배치 하시면 됩니다.


코드

아래 코드를 작성해주겠습니다.

using UnityEngine;

public class Mirror : MonoBehaviour
{
    [SerializeField] private RenderTexture m_MirrorRenderTexture;

    public void CaptureRenderTexture()
    {
        Texture2D texture = new Texture2D(m_MirrorRenderTexture.width, m_MirrorRenderTexture.height, TextureFormat.RGB24, false);

        RenderTexture.active = m_MirrorRenderTexture;
        texture.ReadPixels(new Rect(0, 0, m_MirrorRenderTexture.width, m_MirrorRenderTexture.height), 0, 0);
        texture.Apply();

        byte[] bytes = texture.EncodeToPNG();
        System.IO.File.WriteAllBytes("RenderTextureCapture.png", bytes);

        RenderTexture.active = null;
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.C))
        {
            CaptureRenderTexture();
        }
    }
}

저는 Mirror라고 스크립트의 이름을 지어줬습니다.

Mirror 스크립트를 만든 다음 Mirror "게임오브젝트"에 붙여주시면 됩니다.


캡쳐 준비 단계 

Render Texture에 붙여준 다음 게임을 실행 후 C버튼을 눌러줍니다.

 

C버튼을 눌러주면 프로젝트 폴더에 png파일을 만들어낼 수 있습니다.


png파일의 경우 프로젝트 폴더내 저장한 경로를 따라가면 찾아볼 수 있습니다!