본문 바로가기
Unity/UnityEditor

[UnityEditor] 인스펙터에서 Scene 로드 하는 방법

by Kyoung2 2023. 3. 28.
반응형

Unity 에서 어떤 특정상황에 다른 Scene 을 로드해야할 상황들이 생긴다.  일반적으로는 Project파일에서 클릭하여 다른 씬을 확인하는 경우들이 많다. 이를 해결하기 위해 Runtime 중에 인스펙터 창의 버튼을 활요하여 Scene을 로드할 수 있도록 구성해보겠다. 

 

먼저 Scene을 로드하는 스크립트를 작성한다.

 

using UnityEngine.SceneManagement;

public class SceneLoaderManagements : MonoBehaviour
{
	public string sceneManagementName;
    
	public void ChangeScene(string sceneName)
    {
        SceneManager.LoadSceneAsync(sceneName);
    }
}

 

간단하게 비동기 로드를 할 수 있도록 하는 스크립트이다.  이제 커스텀 에디트를 위해  assets 폴더 밑에 Editor 폴더를 생성하여 준다.

 

그리고 Editor 폴더 내에 SceneLoaderManagementsEditor.cs 파일을 생성하여 준다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(SceneLoaderManagements))]
public class SceneLoaderManagementsEditor : Editor
{
    public SceneLoaderManagements sceneLoaderManagements;
    SerializedProperty sceneName;

    private void OnEnable()
    {
        if (AssetDatabase.Contains(target))
        {
            sceneLoaderManagements = null;
        }
        else
        {
            sceneLoaderManagements = (SceneLoaderManagements)target;
            sceneName = serializedObject.FindProperty("sceneManagementName");
        }
    }

    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        if (sceneLoaderManagements == null)
        {
            return;
        }
        if (GUILayout.Button("Scene Load"))
        {
            sceneLoaderManagements.ChangeScene(sceneName.stringValue);
        }
    }
}

생성한 스크립트를 위의 코드를 넣어준다.

 

Scene 에서 빈 게임오브젝트를 생성한 후 SceneLoaderManagements.cs 를 컴포넌트로 붙여준다.

 

위와 같이 버튼이 생기는 것을 확인할 수 있다.  이제 특정 상황에서 Scene 명만 입력하면 언제든 Scene 을 로드할 수 있게 된다.

728x90
반응형

# 로딩 화면 동작 코드(Code) 설정하기
loading