본문 바로가기
유니티 최고/유니티 개념

유니티(Unity) 싱글톤(Singleton) 이란 & 사용해보기 (씬이동시 데이터 유지방식)

by Lee_story_.. 2023. 5. 25.
728x90

유니티는 정말 많은 기능들이 있네요....

 

이번엔 싱글톤이란 개념을 사용해보겠습니다. 

 

 


싱글톤이란?

소프트웨어 디자인 패턴 중 하나로, 클래스의 인스턴스가 오직 하나만 존재하도록 보장하는 패턴입니다.

 

먼가 어렵네요.... 하지만 쓰임새를 보면 이해가 바로 되실겁니다!

 

만약 프로젝트에서 씬을 계속해서 이동하는데 어떠한 정보나 데이터에 대해 지속적으로 접근을 해야한다면...

그만큼 낭비가 발생하겠죠.... 이것을 위해서 씬 로드시 데이터가 파괴되지 않게 계속 유지해 주는 그런 역할!

 

그렇기에 게임 시스템 상의 전체를 관리하는 요소들을 모아 구성하면 자원에 대해서 낭비를 줄일 수 있습니다! 

 

 

 

 

 

한 번 테스트형식으로 예제를 작성해 봅시다!

 


예제!

먼저 아래와 같은 스크립을 하나 만들어 줍시다 (이름은 상관없습니다!)

 

그리고 씬 상의 한 오브젝트에 설치!

 

 

그리고 아래와 같이 코드를 생성해줍시다. 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager instance = null;

    //프로그램 실행시에 유지할 값들
    [HideInInspector]
    public int myGold = 0;
    public string id = "";


    private void Awake()
    {
        if (instance == null) //존재하고 있지 않을때
        {
            instance = this; //다시 최신화
            DontDestroyOnLoad(gameObject); //씬변경시 파괴 x
        }
        else
        {
            if (instance != this) //중복으로 존재할시에는 파괴! 
                Destroy(this.gameObject); 
        }
    }
}

이게 끝!

 

이제 GameManager에 저장한 값들에 접근을 하여 연결/ 수정/ 저장 들을 할수 있습니다

 

 

접근은 단순하게 아래처럼 가능합니다.

GameManager.instance.id = "!@!!@";

 

 

 

DontDestroy로 설정해주면 아래처럼 따로 생성되는것을 볼수있고 

\

 

씬이동 후에도 유지되어있는것을 볼 수 있습니다. 

 

최종적으로 아래처럼 값을 저장/변경하며 씬을 이동할 수 있게됩니다!

 

 

 


마무리

 

싱글톤.... 생소한 이름이지만

방식은 데이터들의 재생성을 막기위해 계속 유지되는 오브젝트를 생성해 저장해둔다는 점은

그렇게 어렵지 않게 구현할수 있었습니다. 

 

그렇다고 너무많은 데이터를 한군데에서 관리하게 되면 너무 방대해지기 때문에 꼭필요한 데이터들만 관리해줍시다.

 

게임으로 예를 든다면 현재 접속중인 아이디/회원번호, 캐릭터의 능력치, 소유아이템 등이 있을것 같습니다.

 

재생성 시간이 꽤 걸리고 많이 사용될 것 같다!  >> 싱글톤 방식을 사용하시면 될것 같습니다.

 

 

끝!

 

 

 

틀린점이 있다면 댓 달아주세요!

댓글