너무 세세하고 작은 기능들로 스크립트를 나누었던것 같아서
정리할겸 클래스와 오브젝트들의 구조를 변경했다.
아직 자잘한 기능들만 만들고 있어서 더 변경될 가능성이 많지만
중간 정리 느낌으로 기록해두려 한다.
🔽 BaseObject 기본 코드
public class BaseObject : MonoBehaviour, IInteractable, IShowInfo
{
public BaseData m_baseData;
public GameObject m_nameTag;
public TextMeshPro m_nameTagText;
private void Awake()
{
Init();
}
public virtual void Init()
{
I_SetNameTag();
}
public virtual void I_InteractableFunc(KeyCode keyCode)
{
}
public void I_SetNameTag()
{
if (m_nameTag == null || m_nameTagText == null) return;
m_nameTagText.text = m_baseData.Name;
float x = m_nameTag.transform.position.x;
float y = transform.position.y + transform.localScale.y * 0.5f;
m_nameTag.transform.position = new Vector3(x, y, 0);
}
public void I_ShowNameTag(bool show)
{
if (m_nameTag == null || m_nameTagText == null) return;
m_nameTag.SetActive(show);
}
}
🔽 SingletoneManager 기본 코드
public abstract class SingletonManager<T> : MonoBehaviour where T : SingletonManager<T>, new()
{
private static T inst = null;
public static T Inst
{
get
{
if (inst == null)
{
inst = FindObjectOfType(typeof(T)) as T;
if (null == inst)
{
inst = new GameObject(typeof(T).ToString(), typeof(T)).GetComponent<T>();
}
}
return inst;
}
set
{
inst = value;
}
}
protected virtual void Awake()
{
if (inst != null)
{
inst = this as T;
#if UNITY_EDITOR
if (Application.isPlaying)
#endif
DontDestroyOnLoad(inst);
}
}
public abstract void Init();
protected virtual void OnDestroy()
{
if (inst != null)
inst = null;
}
protected virtual void OnApplicationQuit()
{
if (inst != null)
inst = null;
}
}