유니티 프로그램

[유니티] UNITY 싱글톤패턴(Singleton Pattern)은 어떻게 쓰나요

비도르 2022. 7. 26. 10:52

[유니티] UNITY 싱글톤패턴(Singleton Pattern)은 어떻게 쓰나요

 

안녕하세요. 오늘도 평화롭게 잘 삶아진 닭이 생각나는 2022년 중복입니다.

스크립터를  생성해서 쓰다가 보면 다른 스크립터의 함수나 변수를 사용해야 하는 상황이 생길 때 다음의 세가지 방법을 통해서 스크립터가 있는 게임오브젝트를 찾아서 사용하게 됩니다.

1. GameObject.Find("gameobject_name");

2. GameObject.FindWithTag("gameobject_tag");

3. GameObject.FindObjectsOfType("gameobject_type");


하지만, 유니티로 앱을 만들 때, 변수나 함수를 사용하기 위해서 매번 Find 함수들을 사용하는 것은 여간 번거로운 것이 아닙니다. 이때, 싱글톤 패턴을 사용하면 쉽게 해당 스크립터에 접근하여 사용할 수 있습니다.

How??? 어떻게 하는지 알아보겠습니다.

 

아래와 같이 UnitySingleton 이란 이름의 스크립터를 만들어서 빈오브젝트에 넣고 다른 스크립터에서 이것을 사용하는 방법을 알아보겠습니다.


1. 빈오브젝트에 아래의 스크립터를 만들어서 넣습니다.


 

public class UnitySingleton : MonoBehaviour 
{

//UnitySingleton은 임시로 지은 스크립터 이름입니다.

 

// 메모리에 계속 남도록 static 형태로 자기자신의 인스턴스를 선언합니다. 
    public static UnitySingleton InstanceDam;

     

//Awake 함수가 실행 할 때 자기자신을 할당하게 합니다.

    private void Awake() => InstanceDam = this; 

 

//설정은 끝났고 이제 다른 스크립터에 사용할 변수나 함수를 만들어서 사용하면 됩니다.
    public string singletonedam = "this is Singleton";

    public void printout()

    {

      Debug.Log(singletonedam);

    }
}


2. 평면에 사각형의 큐브가 떨어지도록 화면을 구성하였고, 바닥에 충돌이 발생하면 로그창에 " this is Singleton "이라는 글이 표시되도록 하겠습니다.

(이때 큐브에는 콜라이더와 Rigidbody가 추가됨)

singleton 예제

 3. 그리고 큐브에 "Move" 라는 이름으로 스크립터를 아래와 같이 만들었습니다.


public class Move : MonoBehaviour
{    
    private void OnCollisionEnter(Collision collision) //큐브에 충돌이 발생할때 실행
    {

        //UnitySingleton이란 이름의 스크립터 안에 있는 함수 printout()을 실행함
        UnitySingleton.InstanceDam.printout();

 

         //UnitySingleton이란 이름의 스크립터 안에 있는 변수 singletonedam을 로그창에 출력함
        Debug.Log(UnitySingleton.InstanceDam.singletonedam);
    }
}


4. 아래는 실행 결과 입니다.

singleton 결과

5. 로그창을 보면 큐브가 땅과 충돌할 때 아래와 같이 함수에서 한번! 변수에서 한번! 이렇게 두번 출력된 것을 확인 할 수 있습니다.

Log 창


싱글톤 패턴의 간단한 사용방법을 정리했습니다. 

그럼 즐거운 유니티~ (즐유!) ^^