using System; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using UnityEngine.SceneManagement; public abstract class Singleton : MonoBehaviour where T : Component { private static T _instance; public static T Instance { get { if (_instance == null) { _instance = FindObjectOfType(); if (_instance == null) { GameObject obj = new GameObject(); obj.name = typeof(T).Name; _instance = obj.AddComponent(); } } return _instance; } } private void Awake() { if (_instance == null) { _instance = this as T; DontDestroyOnLoad(gameObject); // 씬 전환시 호출되는 액션 메서드 할당 SceneManager.sceneLoaded += OnSceneLoaded; } else { Destroy(gameObject); } } protected abstract void OnSceneLoaded(Scene scene, LoadSceneMode mode); }