TIL

[6/23] 씬 이동 구조 설계 및 뒤로가기 시스템 구현

youngjin02 2025. 6. 23. 22:18

🎮  오늘 한 일

1. 씬 이동 구조 설계 및 뒤로가기 시스템 구현

  • SceneManagerEx 클래스 제작
    • 싱글톤 패턴 적용 및 DontDestroyOnLoad()로 영구 유지
    • 씬 이동 시 현재 씬을 스택에 저장하고, LoadPreviousScene()으로 이전 씬 복귀
  • LobbyUI, DungeonSelectUI 스크립트 생성하여 버튼 이벤트와 연결
    • AddListener(SceneManagerEx.Instance.LoadScene) 방식으로 코드 연결
    • 하지만 매개변수를 받는 함수라면 AddListener(() => SceneManagerEx.Instance.LoadScene(매개변수)) 이렇게 코드를 수정해야 함.
    • ()가 써있으면 코드를 바로 실행하기 때문에 () => 를 붙여야지 버튼을 눌렀을 때만 실행이 됨.

2. 씬 이동 테스트 및 버그 해결

  • EventSystem이 없어서 버튼 클릭이 안 되던 문제 해결
  • DontDestroyOnLoad로 인해 Editor에서 버튼에 씬매니저 할당이 안 되는 구조 파악 → 코드로만 연결

3. 씬 전환 중 오브젝트가 사라지지 않는 현상 확인

  • 로비 → 던전 선택 → 로비 복귀 → 다시 던전 선택 시 오브젝트가 사라지지 않고 유지되는 현상 발생
  • 씬을 거치고 원래 씬으로 복귀하면 오브젝트가 다 사라지는 줄 알았는데 애초에 사라지는 게 아니였음.

🧠 배운 점

  • SceneManager.LoadScene()은 기본적으로 현재 씬을 완전히 언로드하고 새로운 씬을 로드함
  • AddListener(SceneManager.LoadScene(...))은 즉시 실행되기 때문에 람다식(() =>)으로 감싸야 클릭 시 실행됨
  • DontDestroyOnLoad 오브젝트는 씬 간에 유지되지만, Editor의 인스펙터에서는 다른 씬 오브젝트에 직접 할당이 불가능
  • 버튼 UI가 정상 작동하려면 씬에 반드시 EventSystem이 존재해야 함
  • Stack<string>으로 씬 이동 기록을 남기면 뒤로가기 기능 구현이 깔끔함