Unity 씬 전환과 점수 유지: LoadSceneAsync·데이터 전달 방법

Unity에서 씬을 바꾸면서 점수를 유지하려면 화면 전환과 데이터 수명을 따로 설계해야 합니다. SceneManager.LoadSceneAsync로 다음 씬을 불러오고, 짧은 플레이 세션의 점수는 DontDestroyOnLoad 객체나 별도 게임 상태에 보관하며, 앱 재실행 뒤에도 남길 값은 저장 파일로 분리하세요.

Unity GUI 점수 표시용 변수의 기존 코드 화면
기존 예제의 점수 변수입니다. 정적 변수만으로 장기 저장을 해결하지는 못합니다.
Unity OnGUI에서 점수를 그리는 기존 코드 화면
과거 OnGUI 점수 표시 코드입니다. 현재 프로젝트는 Unity UI 또는 UI Toolkit을 우선 검토하세요.
Unity 씬 전환 버튼의 기존 코드 화면
기존 씬 이동 버튼 예제입니다. 현재는 SceneManager API를 사용합니다.
Unity Build Settings에 씬을 추가한 기존 화면
씬을 빌드 목록에 넣는 기존 화면입니다. Unity 버전에 따라 메뉴 이름은 달라도 포함 여부는 필수입니다.
Unity 게임 화면의 점수 GUI 결과
씬 전환 전 점수가 표시된 기존 결과 화면입니다.
Unity 다음 씬으로 이동한 기존 실행 화면
다음 씬에서도 점수를 유지하려면 데이터 수명과 초기화 시점을 명확히 정해야 합니다.
먼저 확인할 답
Unity에서 씬을 바꾸면서 점수를 유지하려면 화면 전환과 데이터 수명을 따로 설계해야 합니다. SceneManager.LoadSceneAsync로 다음 씬을 불러오고, 짧은 플레이 세션의 점수는 DontDestroyOnLoad 객체나 별도 게임 상태에 보관하며, 앱 재실행 뒤에도 남길 값은 저장 파일로 분리하세요.

씬은 빌드 목록에 포함하고 이름이나 인덱스를 정확히 쓴다

SceneManager.LoadScene 또는 LoadSceneAsync가 대상을 찾으려면 씬이 빌드 설정 목록에 포함돼 있어야 합니다. 이름 문자열은 오타와 이름 변경에 취약하고, 인덱스는 순서 변경에 취약해요. 프로젝트 규모에 맞춰 상수나 중앙화된 전환 서비스를 사용하면 참조를 관리하기 쉽습니다.

작은 씬은 동기 LoadScene도 가능하지만 로딩이 길면 화면이 멈춘 것처럼 보일 수 있습니다. LoadSceneAsync의 AsyncOperation을 받아 진행 상태와 입력 차단을 관리하세요. 버튼을 여러 번 눌러 중복 전환이 시작되지 않도록 상태 플래그도 둡니다.

점수 객체의 수명은 씬보다 길게, 중복 생성은 막는다

점수 관리 GameObject에 DontDestroyOnLoad를 적용하면 씬이 바뀌어도 살아남습니다. 하지만 새 씬에 같은 관리자가 또 있으면 두 개가 생겨 점수가 중복 계산될 수 있어요. Awake에서 기존 인스턴스를 확인하고 중복 객체를 제거하는 패턴이 필요합니다.

단순 static 필드는 빠른 실험에는 편하지만 초기화 시점과 테스트 격리가 흐려집니다. 게임 상태 클래스를 명시적으로 두고 새 게임 시작, 재시작, 메인 메뉴 복귀 때 언제 값을 0으로 돌릴지 정하세요.

화면 표시는 상태를 읽기만 하게 만든다

과거 OnGUI 예제는 원리를 보여주지만 매 프레임 호출되는 즉시 모드 UI입니다. 현재 일반 게임 화면은 Unity UI 또는 UI Toolkit에서 텍스트 컴포넌트가 점수 상태를 구독하거나 갱신하도록 설계하는 편이 관리하기 쉽습니다. UI가 점수 자체를 소유하면 씬 전환 때 값이 사라질 수 있어요.

앱을 종료해도 최고 점수를 남겨야 한다면 PlayerPrefs의 용도와 한계를 확인하거나 검증 가능한 저장 형식을 사용합니다. 민감하거나 조작 방지가 필요한 데이터는 로컬 저장만 신뢰하지 마세요.

public void GoToResult()
{
    if (!isLoading)
        StartCoroutine(LoadResult());
}

IEnumerator LoadResult()
{
    isLoading = true;
    yield return SceneManager.LoadSceneAsync("Result");
}

적용 전에 확인할 체크리스트

기존 화면은 작성 당시의 기록으로 보존했습니다. 현재 작업에서는 제품·서비스·언어 버전과 공식 문서의 적용 대상을 먼저 맞추세요. 설정이나 코드를 한 번에 크게 바꾸지 말고, 변경 전 상태를 기록한 뒤 작은 예제로 결과를 확인하는 편이 안전합니다.

문제가 생기면 같은 조작을 반복하기보다 정확한 오류 문구, 사용 버전, 재현 단계, 기대한 결과와 실제 결과를 적어 두세요. 공개된 캡처에는 계정 주소, 비밀 키, 일련번호처럼 악용될 수 있는 정보가 없는지도 확인합니다.

자주 묻는 질문

기존 게시일과 URL은 바뀌나요?

아니요. 기존 글을 같은 URL에서 보완했으므로 과거 기록과 연결은 유지됩니다.

예전 화면과 현재 화면이 다르면 무엇을 따라야 하나요?

이미지는 당시 맥락을 이해하는 참고 자료로 보고, 실제 조작은 현재 버전의 공식 문서와 화면 문구를 기준으로 하세요.

한 번 확인한 뒤 계속 같은 방법을 써도 되나요?

버전과 정책이 바뀔 수 있습니다. 업데이트 뒤에는 핵심 동작과 보안 조건을 다시 확인해야 합니다.

공식 자료

이 글은 기존 게시물의 URL과 이미지 기록을 유지하면서, 현재 독자가 잘못 적용하기 쉬운 부분을 공식 자료에 맞춰 다시 정리했습니다.

댓글 쓰기

0 댓글