Unity Game Manager: 시나리오 간 지속성 문제 및 솔루션
질문:
여러 장면에 걸쳐 지속되도록 설계된 게임 관리자 스크립트는 모든 장면에 존재하더라도 프로젝트 초기화 시 한 번만 실행됩니다.
이유:
모든 Unity 프로젝트에는 영구 개체 및 시스템의 중앙 허브로 "사전 로드 장면"이 필요합니다. 이 시나리오는 빌드 설정에서 시나리오 0으로 지정되어야 합니다.
해결책:
미리 로드된 장면 만들기:
미리 로드된 게임 개체 추가:
DontDestroyOnLoad 적용:
사전 로드 장면에 일반적인 동작 배치:
다른 장면의 구성요소 찾기:
다른 장면에서 이러한 영구 구성 요소에 액세스하려면 정적 메서드 "Object.FindObjectOfType
<code class="language-C#">SoundEffects sound = Object.FindObjectOfType<SoundEffects>(); GameState state = Object.FindObjectOfType<GameState>();</code>
선택적 최적화:
코드 중복을 줄이려면 다음 전역 스크립트 사용을 고려하세요.
<code class="language-C#">public static class App { public static SoundEffects SoundEffects { get; private set; } public static GameState GameState { get; private set; } static App() { GameObject appObject = GameObject.Find("__app"); SoundEffects = appObject.GetComponent<SoundEffects>(); GameState = appObject.GetComponent<GameState>(); } }</code>
이 스크립트를 사용하면 단순화된 구문을 사용하여 이러한 구성 요소에 액세스할 수 있습니다.
<code class="language-C#">App.SoundEffects.PlayExplosion(); App.GameState.CurrentLevel = 5;</code>
개발 편의성 :
개발 효율성을 높이기 위해 "preload" 장면에 스크립트를 추가하는 것을 고려할 수 있습니다. "__app" 개체가 존재하지 않으면 프로젝트 초기화 중에 "preload" 장면이 자동으로 로드됩니다. 이렇게 하면 "Play"를 클릭할 때마다 게임이 "preload" 장면에서 시작됩니다.
위 내용은 내 Unity 게임 관리자 스크립트가 한 번만 실행되는 이유는 무엇이며 장면 전체에 걸쳐 지속되도록 하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!