2D 콘텐츠 제작 개발일지 (mario)

유니티(unity) 씬 전환 시 UI 유지하기

노재두내 2024. 9. 25. 15:29

마리오 개발 당시에 이거 하려고 엄청 애먹었었다.

json 파일로 데이터 저장하기

Playerprefs, DontDestroyonLoad 등 안해본게 없었는데 제대로 해결 못함 

 

그때는 싱글톤 패턴에 대해서 잘 몰랐다 하지만 이젠 다르지 ..'

 

이건 싱글톤 패턴으로 하면 간단히 할 수 있었다

https://art-life.tistory.com/130

 

유니티-싱글톤패턴(Singleton) 설명 및 스크립트 예제

오랜만의 포스팅을 싱글톤으로 하게 되었네요. 일단 제 기준으로 유니티에서 사용하기 편하고 관리하기 쉬운 방법의 싱글톤 예제를 가지고 왔습니다. 싱글톤의 역할 싱글톤은 프로그래밍 디자

art-life.tistory.com

이 블로그에 도움을 크게 받았다 !!!!!

 

 

먼저 GameManager 스크립트 생성한다.

 

GameManager 빈 오브젝트 생성하고 할당 !!

 

 

<GameManager.cs>

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

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

    private void Awake()
    {
        if (instance == null) //instance가 null. 즉, 시스템상에 존재하고 있지 않을때
        {
            instance = this; //내자신을 instance로 넣어줍니다.
            DontDestroyOnLoad(gameObject); //OnLoad(씬이 로드 되었을때) 자신을 파괴하지 않고 유지
        }
        else
        {
            if (instance != this) //instance가 내가 아니라면 이미 instance가 하나 존재하고 있다는 의미
                Destroy(this.gameObject); //둘 이상 존재하면 안되는 객체이니 방금 AWake된 자신을 삭제
        }
    }

    //게임 내에서 씬이동시 유지하고 싶은 변수
    public float time = 400f;
    public int coin = 0;
    public int score = 0;
}

GameManager 스크립트는 이렇게 작성된다 .

Awake 부분까지는 동일하게 작성하고 

변수 부분만 내가 원하는 변수로 작성했다. 

 

이제 증가 감소 부분에 원래 this.coin+=1; 이런식으로 작성했다면 이를 

GameManager.instance.coin+=1; 이렇게 바꿔주기만 하면 된다. 

 

그러면 GamaManager이 이런식으로 초기화 되어있고 게임 실행했을 때

DontDestoryOnLoad에서 계속 유지된다. 

 

 

[결과물]

이런식으로 씬이 총 2번 전환됐는데 모두 잘 유지 되는 모습 !!! 

참고로 UpdateUI 까먹지 않도록 주의하자