티스토리 뷰

개발/Unity

[Unity] Scene Template

HONGGG 2025. 9. 21. 21:25

씬 템플릿 가이드 (Scene Template)


용도

유니티 작업을 하다보면 다수의 씬에서 동일하게 사용되는 구성요소들이 존재한다. 예를 들면 카메라, 메인 캔버스, 라이트, 각종 매니저 등이 이에 해당할 수 있다.

 

이러한 경우 기존 씬을 복제하여 신규 씬에 맞추는 것보다 생성 즉시 셋업이 되는편이 편리하다. 씬 템플릿(Scene Template)은 이러한 상황을 위해 구현된 기능이다.

 

  1. 신규 씬 생성 시 공통 구성요소(카메라, 라이트, 매니저, 이벤트시스템, 필수 레이어 등)을 반복하지 않고 즉시 셋업.
  2. 여러 유형의 베이스 씬(게임, UI, 테스트, 로더 등) 동시 관리 가능.
  3. 팀/프로젝트별 권장 구성 강제 가능.

 


개요

명칭 설명
지원 버전 Unity 2021.2+ (버전에 따라 UI/이름 약간 다름).
형태 씬을 원본으로 한 템플릿 에셋(프로젝트에 저장). 새 씬 만들 때 이 템플릿을 인스턴스.
의존성 처리 참조(Reference), 복제(Clone), 인스턴스(Instantiate) 방법으로 각 씬 구성요소를 생성/관리.
파이프라인 훅(에디터 전용) 신규씬 전/후처리 스크립트를 동봉하여 자동 보정 가능.

 

의존성 처리 방법

  1. 참조 (Reference)
    • 참조 방식으로 생성된 구성요소는 씬 템플릿이 사용하는 구성요소와 동일한 객체를 사용한다.
    • 원본 객체에 수정사항이 발생하면 참조를 사용한 모든 씬의 구성요소도 동일하게 적용된다.
  2. 복제 (Clone)
    • 씬 템플릿에 정의된 구성요소를 복제하여 신규 씬과 동일한 위치에 신규 프리팹을 생성한다.
    • 매번 복제하면 중복 에셋이 기하급수적으로 쌓일 수 있다.
  3. 인스턴스 (Instantiate)
    • 씬 템플릿의 구성요소를 참조하여 씬 내부에 신규 객체(Instance)를 생성한다.
    • 프리팹 리소스로 새로운 오브젝트를 생성하는 것과 동일하게 동작한다.

 


사용법

A. 템플릿 만들기

    1. “표준 베이스 씬”을 구성(카메라, 라이트, Volume, PostProcess, GameManager, 인풋, 레이어/태그, 라이트 설정 등).
    2. Project 뷰에서 Create → Scene Template (또는 Scene 우클릭 “Create Scene Template from this Scene”)
    3. 템플릿 인스펙터에서:
      • Name/Description/Thumbnail
        • 각 씬 템플릿을 구별하기 위한 정보 작성
        • 만약 신규씬 생성 인스펙터 창에 새로만든 씬템플릿 정보도 추가하고 싶다면 'Pin in New Scene Dialog'에 체크한다.
      • Dependencies
        • 각 참조에 대해 Reference / Instantiate / Clone 지정
      • Thumbnail
        • 해당 씬 템플릿의 IMGUI상 표현될 썸네일 이미지 생성.
      • Scene Template Pipeline
        • 새 프로젝트/새 씬 기본 후보로 노출할지 결정

 

 

B. 템플릿으로 새 씬 만들기

  1. File → New Scene (또는 Project 뷰에서 템플릿 더블클릭)
  2. 템플릿 선택
    • (필요시) Additively 체크
  3. Create.
  4. 생성 직후 Play/Lighting/Physics/Time/Quality 등 프로젝트 세팅과 충돌 없는지 확인.

 

C. 파이프라인 후처리(선택, 에디터 전용)

  • 버전에 따라 네임스페이스/시그니처가 다를 수 있다(대개 UnityEditor.SceneTemplate 하위).
    • 에디터 전용 asmdef로 분리.
예시(개념 코드, 버전에 따라 메서드명 상이):
#if UNITY_EDITOR && UNITY_2021_2_OR_NEWER
using UnityEditor;
using UnityEditor.SceneTemplate;
using UnityEngine;
using UnityEngine.SceneManagement;

public class MySceneTemplatePipeline : ISceneTemplatePipeline
{
    // 템플릿 유효성(필요 시 검사)
    public bool IsValidTemplate(SceneTemplateAsset template, bool isAdditive) => true;

    // 생성 직후 후처리
    public void OnTemplateCreated(SceneTemplateAsset template, Scene scene, bool isAdditive, string newScenePath)
    {
        // EventSystem 보장
        if (Object.FindObjectOfType<UnityEngine.EventSystems.EventSystem>() == null)
        {
            var go = new GameObject("EventSystem");
            go.AddComponent<UnityEngine.EventSystems.EventSystem>();
            go.AddComponent<UnityEngine.EventSystems.StandaloneInputModule>();
            SceneManager.MoveGameObjectToScene(go, scene);
        }

        // 루트 네이밍/클린업(예: (Clone) 제거)
        foreach (var root in scene.GetRootGameObjects()){
            root.name = root.name.Replace("(Clone)", "");
        }
        
        // 필수 레이어/태그/품질 등 프로젝트 세팅 보정 로직…(필요 시 추가)
        UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(scene);
    }
}
#endif

정확한 인터페이스/이벤트명은 Unity 버전에 따라 다를 수 있으니, 사용 중인 버전의 Scene Template Pipeline 문서를 보고 시그니처를 맞춰야함.

 


추가

  • 템플릿 분리 전략
    • GameplayBase, UIBase, Loader(Entry), Tools/TestHarness 등으로 목적별 템플릿을 작게 분할해야함.
    • 거대한 “올인원 템플릿”은 의존성 폭발과 유지보수 지옥을 부른다.
  • 프리팹 중심 설계
    • 템플릿 씬 안의 구성은 최대한 프리팹화.
    • 템플릿 업데이트 = 프리팹 업데이트로 귀결되게.
  • 에디터 전용 검증
    • 생성 직후 Validation 스크립트로 필수 컴포넌트/레이어/태그/빌드 세팅 검사.
      • 검사 결과를 확인하는 로그 시스템 설정할 것.
  • 라이트/볼륨 세팅 고정
    • URP/HDRP 볼륨과 라이트 설정은 템플릿에서 일관화.
    • 팀 표준 노이즈를 없앤다.
  • 어드레서블/리소스 관리
    • 템플릿에 Addressables 참조를 넣어도 되지만, 런타임 로딩 전제면 “씬에 즉시 존재해야 하는 것”만 템플릿에 두고 나머지는 런타임 로드로 분리.
  • 버전 관리
    • 템플릿 변경 시 ChangeLog 남겨라(무엇이 기본 추가/삭제됐는지).
    • 구 템플릿으로 만든 씬이 깨지는 사례가 생길수 있다.
  • CI 안전장치
    • PR 시 Editor 테스트로 “템플릿 모두로 새 씬 생성 에러/경고 0” 체크를 돌리면 품질이 안정된다.

 


기타 정보 (주의사항/FAQ)

  • 라이트맵/네브메시 등 베이크 데이터
    • 템플릿에 베이크 결과를 기대하지 마라.
    • 새 씬은 대부분 다시 베이크가 필요하다.
  • EditorOnly 오브젝트
    • 템플릿에 디버그용 오브젝트를 둘 거면 EditorOnly 태그로 표기(빌드 제외).
  • Clone 남발 금지
    • 의존성을 Clone로 두면 동일 머티리얼/프리팹이 중복 생성돼 무질서해진다.
    • 기본은 Reference 또는 Instantiate.
  • 씬 분할과 병행
    • 큰 프로젝트는 Loader(진입) 씬 + Content(Additive) 씬 조합을 템플릿으로 각각 운용하면 확장성이 좋다.
  • asmdef 권장
    • 파이프라인/검증 스크립트는 Editor 전용 asmdef에 격리.
    • 런타임 의존성 섞지 말 것.
최근에 올라온 글
최근에 달린 댓글
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함