빙수달 게임 개발 노트

Singleton패턴을 사용한 Managers 생성 본문

Dev Log : Game/유니티(Unity)

Singleton패턴을 사용한 Managers 생성

빙수달 2025. 6. 17. 20:05
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Managers : MonoBehaviour
{
    static Managers s_instance;       // 유일성 보장
    static Managers Instance { get { Init(); return s_instance; } }     // 유일한 매니저를 갖고온다

    InputManager _input = new InputManager();
    ResourceManager _resource = new ResourceManager();
    public static InputManager Input { get { return Instance._input; } }
    public static ResourceManager Resource {  get { return Instance._resource; } }
    void Start()
    {
        Init();
    }

    void Update()
    {
        _input.OnUpdate();
    }

    static void Init()
    {
        GameObject go = GameObject.Find("@Managers");
        if (s_instance == null)
        {
            go = new GameObject { name = "@Managers" };
            go.AddComponent<Managers>();
        }

        DontDestroyOnLoad(go); // 씬이 바뀌어도 파괴되지 않도록 설정
        s_instance = go.GetComponent<Managers>();
    }
}
  • s_instance : Managers의 정적(전역) 인스턴스, 유일성을 보장한다.
  • Instance 프로퍼티 : 필요할 때 자동으로 Init() 호출해서 싱글톤 초기화도 해주고 반환도 한다.
  • 실제 Input과 Resource 관련 기능을 하는 하위 매니저들을 포함시킨다.
  • 각 매니저들을 Managers.Input, Managers.Resource처럼 정적으로 접근 가능하다.

초급 개발자에게는 적합한 구조지만, 전역 접근이 가능하다는 건 곧 모든 객체가 Managers에 의존할 수 있기에 대규모 프로젝트 시, 유지보수가 어려울 수 있다.

 

'Dev Log : Game > 유니티(Unity)' 카테고리의 다른 글

[Unity] 인벤토리 구현  (0) 2025.01.20