[Toy][Unity] 구조 개편

0시0분·2024년 4월 4일
0

Toy

목록 보기
5/18

너무 세세하고 작은 기능들로 스크립트를 나누었던것 같아서
정리할겸 클래스와 오브젝트들의 구조를 변경했다.

아직 자잘한 기능들만 만들고 있어서 더 변경될 가능성이 많지만
중간 정리 느낌으로 기록해두려 한다.

오브젝트

🔽 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;
    }
}

0개의 댓글