싱글톤

조성원·2025년 5월 16일

어떤 곳에서든 전역 접근 가능하도록 만드는 것

public class CharacterManager : MonoBehaviour
{
    private static CharacterManager instance;
    public static CharacterManager Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new GameObject("CharacterManager").AddComponent<CharacterManager>();
            }
            return instance;
        }
    }

    public void Awake()
    {
        if(instance == null)
        {
            instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(this);
        }
    }
}

  • 싱글톤을 이용해 서로 다른 스크립트가 서로를 참조할 수 있게 하기


Manager 스크립트에 프로퍼티 선언 (캡슐화, 접근 제한을 위해)


해당 스크립트에서 CharacterManager.Instance.Player = this; 를 이용하여 Player 오브젝트를 CharacterManager에 등록.
다른 스크립트에서 Player의 내용을 참조할 수 있게 된다.

메서드 체이닝

instance = new GameObject("CharacterManager").AddComponent<CharacterManager>();

intance에 오브젝트를 만들고 CharacteManager(현재 컴포넌트)를 할당한다.
이렇게 연속적인 메서드를 실행시키는 구조를 메서드 체이닝이라고 한다.

※ 기본적으로 모든 스크립트는 오브젝트에 있어야 실행해야 되는데 위 방어코드 같은 경우는 오브젝트가 없는 상태에서 실행되야 하기 때문에 모순 같아 보인다.
이러한 코드가 실행 가능한 이유는 CharacterManager.Instance.Player = this;처럼 다른 오브젝트에서 Instance를 호출하면 CharacterManager의 instance가 생성되기 때문이다.

profile
direction *= -1;

0개의 댓글