SPRT BootCamp Unity : 21일 차

강동현·2025년 10월 28일

SpartaCodingClub_Unity_12th

목록 보기
20/23

0. 서론

금일 '메타버스만들기'과제 제출 날로 어제부터 급하게 과제를 하는 동안 발생하였던 트러블 슈팅에 대해 적어볼 것이다.

1. 문제

  • 메타버스 속 미니게임 진행 중 Restart버튼을 눌러 다시 시작하면 점수 카운팅과 버튼과 같은 UI가 출력이 안 되는 문제 발생.
.
.
.
    private void Awake()
    {
        if (gameManager == null)
        {
            gameManager = this;
            DontDestroyOnLoad(this.gameObject);
        }
        else
        {
            Destroy(this.gameObject);
            return;
        }

        uiManager = FindObjectOfType<UIManager>();
        LoadHighScore();
    }

    public void Start()
    {
        uiManager.UpdateScore(0);
        uiManager.UpdateHighScore(highScore);
    }
.
.
.

위 코드는 문제의 코드이다.

2. 문제 파악

  • 게임 시작 시점에만 UI와 점수가 초기화가 되는 것 같음
  • 씬이 하나 일 때는 문제가 없음(따로 미니게임만 만든 것이 존재
  • 새로운 씬을 생성 시 ui관리 스크립트와의 참조가 끊김 즉 여러 개의 씬을 사용 시 ui가 연결되지 않은 것 같음

3. 해결 방법

  • 단일 씬이 아닌 멀티 씬에 대응이 가능한 코드로 리팩토링
    • SceneManager.sceneLoaded로 씬이 바뀔 때 마다 호출
    • 새로 로드된 씬에 있는 uiManager를 다시 찾음
    • GameManager을 DontDestroyOnLoad라는 함수로 계속 유지되게 하면서, 각 씬에 새로운 uiManager가 생겨도 끊임 없이 재연결이 가능하게 됨
.
.
.

SceneManager.sceneLoaded += OnSceneLoaded;

private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
    uiManager = FindObjectOfType<UIManager>();
    currentScore = 0;
    ...
}

0개의 댓글