티스토리 뷰
씬 템플릿 가이드 (Scene Template)
용도
유니티 작업을 하다보면 다수의 씬에서 동일하게 사용되는 구성요소들이 존재한다. 예를 들면 카메라, 메인 캔버스, 라이트, 각종 매니저 등이 이에 해당할 수 있다.
이러한 경우 기존 씬을 복제하여 신규 씬에 맞추는 것보다 생성 즉시 셋업이 되는편이 편리하다. 씬 템플릿(Scene Template)은 이러한 상황을 위해 구현된 기능이다.
- 신규 씬 생성 시 공통 구성요소(카메라, 라이트, 매니저, 이벤트시스템, 필수 레이어 등)을 반복하지 않고 즉시 셋업.
- 여러 유형의 베이스 씬(게임, UI, 테스트, 로더 등) 동시 관리 가능.
- 팀/프로젝트별 권장 구성 강제 가능.
개요
| 명칭 | 설명 |
| 지원 버전 | Unity 2021.2+ (버전에 따라 UI/이름 약간 다름). |
| 형태 | 씬을 원본으로 한 템플릿 에셋(프로젝트에 저장). 새 씬 만들 때 이 템플릿을 인스턴스. |
| 의존성 처리 | 참조(Reference), 복제(Clone), 인스턴스(Instantiate) 방법으로 각 씬 구성요소를 생성/관리. |
| 파이프라인 훅(에디터 전용) | 신규씬 전/후처리 스크립트를 동봉하여 자동 보정 가능. |
의존성 처리 방법
- 참조 (Reference)
- 참조 방식으로 생성된 구성요소는 씬 템플릿이 사용하는 구성요소와 동일한 객체를 사용한다.
- 원본 객체에 수정사항이 발생하면 참조를 사용한 모든 씬의 구성요소도 동일하게 적용된다.
- 복제 (Clone)
- 씬 템플릿에 정의된 구성요소를 복제하여 신규 씬과 동일한 위치에 신규 프리팹을 생성한다.
- 매번 복제하면 중복 에셋이 기하급수적으로 쌓일 수 있다.
- 인스턴스 (Instantiate)
- 씬 템플릿의 구성요소를 참조하여 씬 내부에 신규 객체(Instance)를 생성한다.
- 프리팹 리소스로 새로운 오브젝트를 생성하는 것과 동일하게 동작한다.
사용법
A. 템플릿 만들기
- “표준 베이스 씬”을 구성(카메라, 라이트, Volume, PostProcess, GameManager, 인풋, 레이어/태그, 라이트 설정 등).

- Project 뷰에서 Create → Scene Template (또는 Scene 우클릭 “Create Scene Template from this Scene”)

- 템플릿 인스펙터에서:
- Name/Description/Thumbnail
- 각 씬 템플릿을 구별하기 위한 정보 작성
- 만약 신규씬 생성 인스펙터 창에 새로만든 씬템플릿 정보도 추가하고 싶다면 'Pin in New Scene Dialog'에 체크한다.

- Dependencies
- 각 참조에 대해 Reference / Instantiate / Clone 지정

- 각 참조에 대해 Reference / Instantiate / Clone 지정
- Thumbnail
- 해당 씬 템플릿의 IMGUI상 표현될 썸네일 이미지 생성.

- 해당 씬 템플릿의 IMGUI상 표현될 썸네일 이미지 생성.
- Scene Template Pipeline
- 새 프로젝트/새 씬 기본 후보로 노출할지 결정

- 새 프로젝트/새 씬 기본 후보로 노출할지 결정
- Name/Description/Thumbnail
B. 템플릿으로 새 씬 만들기
- File → New Scene (또는 Project 뷰에서 템플릿 더블클릭)
- 템플릿 선택
- (필요시) Additively 체크
- Create.
- 생성 직후 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 스크립트로 필수 컴포넌트/레이어/태그/빌드 세팅 검사.
- 검사 결과를 확인하는 로그 시스템 설정할 것.
- 생성 직후 Validation 스크립트로 필수 컴포넌트/레이어/태그/빌드 세팅 검사.
- 라이트/볼륨 세팅 고정
- URP/HDRP 볼륨과 라이트 설정은 템플릿에서 일관화.
- 팀 표준 노이즈를 없앤다.
- 어드레서블/리소스 관리
- 템플릿에 Addressables 참조를 넣어도 되지만, 런타임 로딩 전제면 “씬에 즉시 존재해야 하는 것”만 템플릿에 두고 나머지는 런타임 로드로 분리.
- 버전 관리
- 템플릿 변경 시 ChangeLog 남겨라(무엇이 기본 추가/삭제됐는지).
- 구 템플릿으로 만든 씬이 깨지는 사례가 생길수 있다.
- CI 안전장치
- PR 시 Editor 테스트로 “템플릿 모두로 새 씬 생성 에러/경고 0” 체크를 돌리면 품질이 안정된다.
기타 정보 (주의사항/FAQ)
- 라이트맵/네브메시 등 베이크 데이터
- 템플릿에 베이크 결과를 기대하지 마라.
- 새 씬은 대부분 다시 베이크가 필요하다.
- EditorOnly 오브젝트
- 템플릿에 디버그용 오브젝트를 둘 거면 EditorOnly 태그로 표기(빌드 제외).
- Clone 남발 금지
- 의존성을 Clone로 두면 동일 머티리얼/프리팹이 중복 생성돼 무질서해진다.
- 기본은 Reference 또는 Instantiate.
- 씬 분할과 병행
- 큰 프로젝트는 Loader(진입) 씬 + Content(Additive) 씬 조합을 템플릿으로 각각 운용하면 확장성이 좋다.
- asmdef 권장
- 파이프라인/검증 스크립트는 Editor 전용 asmdef에 격리.
- 런타임 의존성 섞지 말 것.
'개발 > Unity' 카테고리의 다른 글
| [Unity] WebGL - Index 토큰 (0) | 2025.11.09 |
|---|---|
| [Unity] WebGL 빌드 (0) | 2025.11.08 |
| [Unity] asmdef(Assembly Definition) - 실전 아키텍처를 강제하는 최소 도구 (0) | 2025.09.21 |
| [Unity] 🧙♂️ God Object (0) | 2025.05.21 |
| [Unity] 유니티 최적화 체크 리스트 (0) | 2025.05.15 |