unity 언제나 특정 씬에서 시작하게 만들기

 

#. 특정 씬에서 시작하는 게임 환경

어느 씬 에서나 테스트할 수 있어야 한다!라는 개발 방침을 따르고 있지만 서버 등이 들어간 경우에는 시작 씬부터 초기화를 순차 진행하지 않으면 오류가 발생할 여지가 많다.

 

개별 테스트는 각 씬에서 진행하고 최종 테스트를 할 때는 시작 씬부터 시작해서 테스트하는 경우가 많다.

 

매번 시작씬 테스트를 하기 위해서 씬을 옮겨서 플레이하는 건 귀찮은 상황. 

그런데 현재 씬과 관계없이 플레이모드 시작 씬을 커스텀할 수 있는 방법이있다.

 

 

#. 시작 씬 설정하기

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폴더 하위에 위치해야 하며, 빌드에서는 적용되지 않는다.

 

 

댓글

Designed by JB FACTORY