렌더 텍스처를 사용하여 다른 장면의 내용을 텍스처로 표시

페이지 업데이트 :
페이지 생성 날짜 :

검증 환경

윈도우
  • 윈도우 11
Unity 에디터
  • 2021.3.3f1
입력 시스템 패키지
  • 1.3.0

이 팁의 전제 조건

이 팁에 대한 설명의 전제로 다음 설정이 미리 이루어졌습니다.

처음에

렌더 텍스처를 사용하면 화면 대신 텍스처에 그림을 쓸 수 있습니다. 이를 통해 텍스처 이미지를 미리 준비하지 않고도 게임 실행 중에 텍스처를 자유롭게 생성할 수 있습니다.

예를 들어 매 프레임마다 동적으로 변경되는 렌더 텍스처에 쓸 수도 있습니다(예: 게임에 있는 디스플레이에 기본 카메라와 다른 이미지를 투영하기 위해).

이미지 준비

렌더 텍스쳐를 사용할 때는 이미지를 준비할 필요가 없지만, 그리기 결과를 알기 쉽게 하기 위해 샘플로 준비할 수 있습니다.

렌더 텍스처 만들기

프로젝트에서 자산을 만듭니다. Create(생성)에서 Render Texture(렌더 텍스처)를 선택합니다.

이름은 임의로 지정할 수 있습니다. 이 때 이름은 외부에서 직접 NewRenderTexture 지정되지 않으므로 .

렌더 텍스처를 선택하고 인스펙터에서 크기를 지정합니다. 렌더 텍스처는 그리기 영역이므로 크기를 지정해야 합니다. 이번에는 따로 만든 장면을 쓰고 싶어서 화면비를 16:9로 설정했습니다.

렌더 텍스처 대상 설정

처음에 생성된 장면의 계층 구조에서 "UI" > "Raw Image"를 선택합니다. 이 개체에 렌더링 텍스처의 내용을 표시합니다. UI의 객체이지만 필요한 것은 다른 객체로 설정할 수 있는 "Raw Image" 구성 요소입니다.

RawImage가 배치되었습니다. UI 개체이기 때문에 Canvas에 배치됩니다. 아직 아무것도 설정하지 않았으므로 흰색 직사각형이 표시됩니다.

스케일이 서로 같아지기를 원하므로 RawImage 객체의 크기를 렌더 텍스처와 동일하게 설정합니다. 가로 세로 비율을 그대로 유지하면 크기를 변경해도 그리기 결과의 배율만 조정되지만, 가로 세로 비율을 변경하면 그리기 결과가 세로 또는 가로로 찌그러집니다.

RawImage 오브젝트의 Raw Image 컴포넌트에는 "텍스쳐"가 있으므로, 거기서 방금 만든 렌더 텍스쳐를 설정합니다. 렌더 텍스처의 내용은 여전히 비어 있으므로 뷰에서 투명합니다.

렌더 텍스처 그리기 콘텐츠의 장면 만들기

다음으로, 렌더 텍스처에 그릴 콘텐츠를 만들기 위해 새 씬을 만듭니다. 메뉴에서 File(파일)을 선택하고 New Scene(새 장면)을 선택합니다.

이 샘플은 2D이므로 2D 장면도 선택합니다.

Scene 폴더에 만듭니다. SampleSceneTexture 이름을 그대로 둡니다.

장면을 만든 후 개체를 적절하게 배치합니다. 렌더 텍스처의 내용을 알고 있기만 하면 됩니다. 카메라 바깥쪽으로 돌출된 것이 그려지지 않는지 확인하기 위해 스프라이트도 카메라 프레임 근처에 배치됩니다.

객체가 겹치면 객체의 컨텍스트가 불확정되므로 배경이 있는 경우 배경 레이어의 순서를 낮춥니다.

"MainCamera"를 선택한 후 "Target texture"에서 렌더 텍스처를 설정합니다. 이렇게 하면 드로잉이 렌더 텍스처에 그려집니다.

MainCamera로 설정된 Audio Listener 구성 요소를 제거합니다. 렌더 텍스처에 필요한 것은 그리기뿐이므로 오디오 리스너가 필요하지 않습니다. 런타임에 "오디오 리스너"가 여러 개 있는 경우 경고가 표시됩니다.

덧붙여서, 이 상태에서 렌더 텍스쳐에 대한 씬을 실행하면, 화면에 아무것도 표시되지 않습니다. 이는 렌더 텍스처에 그림을 그리기 때문입니다. 화면에서 확인하고 싶은 분은 "타겟 텍스쳐"를 삭제하고 실행합니다.

레이어 설정

이 샘플에서는 두 개의 장면을 동시에 이동해야하지만, 그대로 이동하면 렌더 텍스처로 그리는 내용도 메인 화면에 표시되므로 레이어가 별도로 그려지지 않습니다.

먼저 편집기의 오른쪽 상단 모서리에 있는 레이어에서 "레이어 편집"을 선택합니다.

이름과 위치는 임의로 지정할 수 있지만 여기서는 라는 새 RenderTarget 레이어를 추가합니다.

레이어를 추가한 후 렌더 텍스처의 장면을 열고 그릴 모든 개체를 선택한 다음 레이어 값을 방금 만든 RenderTarget 값으로 변경합니다.

SampleSceneTexture 이것으로 장면의 편집이 종료되므로 저장하십시오.

렌더 텍스처 표시

SampleScene 장면을 연 후에는 장면을 끌어다 놓아 계층 구조 SampleSceneTexture 에 추가합니다. 그런 다음 계층 구조에 두 개의 장면이 있어야 하며 장면의 내용이 화면에 표시 SampleSceneTexture 되어야 합니다.

SampleSceneTexture 장면의 내용이 방해가 되므로 계층에서 SampleSceneTexture 장면의 눈 모양 아이콘을 클릭합니다. SampleSceneTexture 이렇게 하면 장면의 개체가 숨겨지고 장면 SampleScene 의 내용만 표시됩니다. 덧붙여서 렌더 텍스쳐 설정이 모두 완료SampleScene 되었으므로 렌더 텍스쳐의 내용은 장면에 배치 된 원시 이미지로 표시되어야합니다.

다만, 눈으로 가리기 아이콘은 에디터에서 보이지 않게 하기 위한 설정일 뿐이므로, 이대로 게임을 실행하면 SampleSceneTexture 장면의 내용도 화면에 표시됩니다. SampleScene 그런 다음 씬(SceneMain Camera) 을 선택하고 인스펙터에서 컬링 마스크에서(From RenderTarget Culling Mask) 를 선택 해제합니다Camera. 이렇게 하면 게임이 실행될 때 RenderTarget 레이어의 객체가 표시되지 않습니다.

게임을 실행해 보세요. 의도한 대로 표시되어야 합니다.

렌더 텍스처를 이동해 보세요

다만, 이 상태에서는, 실제로 렌더 텍스쳐로서 동작하고 있는지, 아니면 단순히 이미지를 크롭으로 표시하고 있는지 알기 어렵기 때문에, 이동해 봅시다.

내용은 무엇이든 될 수 있지만 여기서는 스프라이트를 자동으로 회전하도록 움직임을 설정합니다. SelfRotate 스크립트를 만들고 .

여기에서는 조금씩 회전하는 간단한 과정을 포함합니다.

using UnityEngine;

public class SelfRotate : MonoBehaviour
{
  // 更新はフレームごとに 1 回呼び出されます
  void Update()
  {
    transform.Rotate(0, 0, 0.1f);
  }
}

스크립트를 만든 후 회전하려는 개체에 점점 더 많이 부착합니다.

그런 다음 게임을 실행하고 회전하는지 확인합니다. 렌더 텍스처에서 오브젝트가 움직이는 것을 볼 수 있다고 생각합니다.

동시에 여러 장면을 이동하는 방법

여기서는 처음부터 두 개의 장면이 실행되도록 간단한 예제를 만들었지만 실제 게임에서는 하나의 장면으로 시작해야 하는 경우가 많습니다. 이 경우 장면의 시작 부분에 장면을 동적으로 추가하여 여러 장면으로 만들어야한다고 생각합니다.

장면을 추가하는 방법에 대한 설명은 "장면 추가"를 참조하십시오. SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); 기본적으로 전화는 대부분의 문제를 해결해야 합니다.

레이어를 사용하지 않고 렌더 텍스처의 내용이 메인 화면에 나타나지 않도록 하는 방법

렌더 텍스처의 콘텐츠는 메인 씬과 렌더 텍스처 씬이 같은 위치에 있기 때문에 메인 화면에 표시됩니다. 따라서 렌더 텍스쳐의 내용을 메인 씬에 보이지 않는 장소로 이동하면 메인 화면에 표시되지 않습니다. 예를 들어 렌더 텍스처 오브젝트 또는 카메라를 (-10000, -10000) 위치로 이동할 수 있습니다. 이렇게 하면 레이어 설정이 필요하지 않습니다.

렌더 텍스처의 내용을 다른 장면으로 나누지 않고 한 장면에서 완성하려는 경우

이것은 레이어가 없는 이전 방법과 동일한 기술을 사용하여 수행됩니다. 렌더 텍스처에 의해 표시되는 콘텐츠를 기본 카메라에 표시되지 않는 위치로 이동할 수 있습니다. 장면을 분리하는 방법과의 차이점은 두 대의 카메라를 배치해야 한다는 것입니다만, 그 이외는 기본적으로 장면을 분리하는 방법과 같은 설정이 되어 있습니다.

3D 게임에서 다른 관점에서 캡처한 콘텐츠를 렌더 텍스처로 캡처하려는 경우

이 팁은 2D에 초점을 맞추었기 때문에 3D에 대해 많이 이야기하지 않았지만 접근 방식은 기본적으로 동일합니다. 여러 관점에서 단일 3D 공간을 투영하기 때문에 두 개 이상의 장면이 필요하지 않습니다. 필요한 만큼 카메라를 배치하고, 그리기 대상을 렌더 텍스처로 설정하고, 렌더 텍스처를 표시할 위치를 설정하기만 하면 됩니다.