2021년 4학년 1학기 기업연계프로젝트2
컴퓨터소프트웨어공학과 <원광투어팀>
팀장 : 송유진
팀원 : 김나영, 이경희, 한유진
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright 2016-2020, HTC Corporation. All rights reserved. ===========
using System;using UnityEngine;
namespace HTC.UnityPlugin.Utility{ [DisallowMultipleComponent] public abstract class SingletonBehaviour<T> : MonoBehaviour where T : SingletonBehaviour<T> { private static T s_instance = null; private static bool s_isApplicationQuitting = false; private static object s_lock = new object(); private static Func<GameObject> s_defaultInitGOGetter;
private bool m_initialized;
public static bool Active { get { return !s_isApplicationQuitting && s_instance != null; } }
public bool IsInstance { get { return this == Instance; } }
protected bool IsApplicationQuitting { get { return s_isApplicationQuitting; } }
public static T Instance { get { Initialize(); return s_instance; } }
public static void Initialize() { if (!Application.isPlaying || s_isApplicationQuitting) { return; }
lock (s_lock) { if (s_instance != null) { return; }
var instances = FindObjectsOfType<T>(); if (instances.Length > 0) { s_instance = instances[0]; if (instances.Length > 1) { Debug.LogWarning("Multiple " + typeof(T).Name + " not supported!"); } }
if (s_instance == null) { GameObject defaultInitGO = null;
if (s_defaultInitGOGetter != null) { defaultInitGO = s_defaultInitGOGetter(); }
if (defaultInitGO == null) { defaultInitGO = new GameObject("[" + typeof(T).Name + "]"); }
s_instance = defaultInitGO.AddComponent<T>(); }
if (!s_instance.m_initialized) { s_instance.m_initialized = true; s_instance.OnSingletonBehaviourInitialized(); } } }
/// <summary>
/// Must set before the instance being initialized
/// </summary>
public static void SetDefaultInitGameObjectGetter(Func<GameObject> getter) { s_defaultInitGOGetter = getter; }
protected virtual void OnSingletonBehaviourInitialized() { }
protected virtual void OnApplicationQuit() { s_isApplicationQuitting = true; }
protected virtual void OnDestroy() { if (!s_isApplicationQuitting && s_instance == this) { s_instance = null; } } }}
|