[유니티] 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가 추가됨)

3. 그리고 큐브에 "Move" 라는 이름으로 스크립터를 아래와 같이 만들었습니다.
public class Move : MonoBehaviour
{
private void OnCollisionEnter(Collision collision) //큐브에 충돌이 발생할때 실행
{
//UnitySingleton이란 이름의 스크립터 안에 있는 함수 printout()을 실행함
UnitySingleton.InstanceDam.printout();
//UnitySingleton이란 이름의 스크립터 안에 있는 변수 singletonedam을 로그창에 출력함
Debug.Log(UnitySingleton.InstanceDam.singletonedam);
}
}
4. 아래는 실행 결과 입니다.

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

싱글톤 패턴의 간단한 사용방법을 정리했습니다.
그럼 즐거운 유니티~ (즐유!) ^^
'유니티 프로그램' 카테고리의 다른 글
| [유니티] UNITY 플레이시간(타이머)을 다음 씬(SCENE)까지 끊김없이 흐르게 하려면 어떻게 해야 할까요? (0) | 2022.08.09 |
|---|---|
| [유니티] UNITY GameObject의 위치를 랜덤(random)하게 생성하려면 어떻게 하나요? (0) | 2022.08.01 |
| [유니티] UNITY Box Collider를 켜고, 끄는 코딩방법은 뭔가요? (0) | 2022.07.19 |
| [유니티] UNITY 안드로이드 앱을 만들고 나서 시작할 때 자꾸만 180도로 화면이 회전합니다. (0) | 2022.07.11 |
| 유니티 프로그램에 대한 다양한 내용을 담을 블로그 입니다. (0) | 2022.07.07 |