[TIL] Unity - DontDestroyOnLoad - day 42

뭉크의 개발·2023년 9월 12일
0

Unity - Camp

목록 보기
13/70
post-thumbnail

🐧 들어가기 앞서

오늘은 여러가지 기능을 추가했다.

특강을 듣고, UIManager도 제작해보기로 했다.

결국 배경음악은 하나로 바꿨는데, 이게 더 나은 것 같다!

생각보다 마감일이 다가올수록 급해진다.

열심히 하자!


🐧 오늘 배운 것

  1. DontDestroyOnLoad 버그

  2. 목숨, 폭탄, 폭탄 애니메이션 추가

  3. UIManager 제작


🐧 기억할 것 & 진행

😒 DontDestroyOnLoad 버그

게임을 제작하다 보니 MainScene에서 다시 StartScene로 넘어올 때,

DontDestroyOnload 객체가 계속 생성되는 버그를 발견했다.

원인?

싱글톤을 잘못 설정한게 문제였다.

아래는 기존 싱글톤 함수다.

이렇게 생성할 경우, 씬을 불러올 때 마다 계속 생성된다.

public static UIManager instance;

    void Awake()
    {
    	instance = this;
        DontDestroyOnLoad(gameObject);
    }

해결

if 조건문을 붙여서

instance가 없을 경우 즉, 처음 시작할 때 적용되고, 그대로 진행되게 수정했다.

이렇게 되면, 중복생성을 방지할 수 있다.

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

느낀점

항상 예외를 꼭 생각하자.

알고리즘에서도 느꼈는데, 반례에 대한 함수를 추가하는게 중요하다.

로직과 프레임을 잘 갖추고 코드를 구현하자.


🎈 목숨, 폭탄, 폭탄 애니메이션 추가



🎈 UIManager 제작

게임을 진행하다보면 UI 관련해 중복되는 코드가 많아진다.

버튼을 클릭하여 UI를 켜고 끄거나, 씬을 불러오는 버튼이 있다.

이를 하나로 묶어 UIManager에서 호출하도록 수정했다.

장점은 유지보수가 용이하다.

함수는 UIManager에서만 관리하기 때문에, 오류가 생길 경우 UIManager만 확인하면 된다.

UIManager.cs📜

using UnityEngine;
using UnityEngine.SceneManagement;

public class UIManager : MonoBehaviour
{
    public static UIManager instance;

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

    public void LoadScene(string sceneName)
    {
        SceneManager.LoadScene(sceneName);
    }

    public void SetGameObjectActive(GameObject gameObject, bool active)
    {
        gameObject.SetActive(active);
    }
}

🐧 내일 할 일

내일이 제일 바쁘다.

마감 하루 전은 언제나 바쁘니까..!

우선 기능을 모두 구현하면, README.md를 수정하고

PPT와 대본을 제작하자.

MainScene UI도 손 봐야 할 듯!

0개의 댓글