#. 특정 씬에서 시작하는 게임 환경
어느 씬 에서나 테스트할 수 있어야 한다!라는 개발 방침을 따르고 있지만 서버 등이 들어간 경우에는 시작 씬부터 초기화를 순차 진행하지 않으면 오류가 발생할 여지가 많다.
개별 테스트는 각 씬에서 진행하고 최종 테스트를 할 때는 시작 씬부터 시작해서 테스트하는 경우가 많다.
매번 시작씬 테스트를 하기 위해서 씬을 옮겨서 플레이하는 건 귀찮은 상황.
그런데 현재 씬과 관계없이 플레이모드 시작 씬을 커스텀할 수 있는 방법이있다.
#. 시작 씬 설정하기
EditorSceneManager.playModeStartScene를 설정해주면 현재 씬과 관계없이 시작되는 씬을 설정할 수 있다.
물론 어느 상황에나 자동 설정되게 하기 위해 [InitializeOnLoad] 애트리뷰트 등을 같이 활용하면 좋다.
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
[InitializeOnLoad]
public class EditorStartInit
{
static EditorStartInit()
{
var pathOfFirstScene = EditorBuildSettings.scenes[0].path; // 씬 번호를 넣어주자.
var sceneAsset = AssetDatabase.LoadAssetAtPath<SceneAsset>(pathOfFirstScene);
EditorSceneManager.playModeStartScene = sceneAsset;
Debug.Log(pathOfFirstScene + " 씬이 에디터 플레이 모드 시작 씬으로 지정됨");
}
}
InitializeOnLoad 애트리뷰트로 클래스의 생성자가 자동 실행되어 유니티 에디터를 실행할 때 자동으로 플레이 모드의 시작 씬이 설정된다.
#. 원할 때만 시작 씬으로 실행하기
그런데 아까 말했듯 현재 씬에서 테스트를 하는 경우도 있을 것이다.
때문에 에디터의 메뉴 Item에 최초 씬 시작과 현재 씬 시작을 분리하는 방법도 있다.
[MenuItem("MyEditor/시작 씬부터 시작")]
public static void SetupFromStartScene()
{
var pathOfFirstScene = EditorBuildSettings.scenes[0].path;
var sceneAsset = AssetDatabase.LoadAssetAtPath<SceneAsset>(pathOfFirstScene);
EditorSceneManager.playModeStartScene = sceneAsset;
UnityEditor.EditorApplication.isPlaying = true;
}
[MenuItem("MyEditor/현재 씬부터 시작")]
public static void StartFromThisScene()
{
EditorSceneManager.playModeStartScene = null;
UnityEditor.EditorApplication.isPlaying = true;
}
개인적으로는 에디터 커스텀 버튼을 만들어서 시작 씬 or 현재 씬을 선택해서 시작하도록 설정해놓고 있다.
#. 주의점
Editor 스크립트 및 애트리뷰트이다.
해당 스크립트는 반드시 Editor폴더 하위에 위치해야 하며, 빌드에서는 적용되지 않는다.
'🌍 Unity > 유니티 엔진 동작 관련' 카테고리의 다른 글
RuntimeInitializeOnLoadMethod 어느 씬에서나 시작 시 실행되는 함수 (0) | 2023.01.09 |
---|---|
Unity Addressable bundle size analyze (0) | 2022.12.10 |
Unity attribute [field: SerializeField] (0) | 2022.11.20 |
Input System 마우스키보드 게임패드 동시지원 (0) | 2022.10.24 |
유니티 새로운 인풋 시스템 Unity New InputSystem (1) | 2022.10.02 |