▣ 로딩씬을 생성하고 LodingSlider를 생성하고 제작합니다.
그리고 Build Settings에서 씬 3개를 추가합니다.
▣ SceneManager.LoadSceneAsync: 비동기적으로 씬을 로드하는 함수.
AsyncOperation.allowSceneActivation: 로딩이 완료되었을 때 씬을 자동으로 활성화할지 여부를 설정하는 속성.
Slider.value: Slider UI의 현재 값을 설정하거나 가져오는 속성.
SceneManager.UnloadSceneAsync: 비동기적으로 씬을 언로드하는 함수.
▣ FindLoadingSliderInScene()
역할: 로딩 씬에서 LoadingSlider라는 이름을 가진 Slider UI 오브젝트를 찾고, 이를 loadingSlider 변수에 할당합니다.
GameObject.Find("LoadingSlider"): 유니티 씬 내에서 특정 이름을 가진 오브젝트를 찾는 함수입니다. 해당 오브젝트가 비활성화된 상태라면 찾지 못하므로, 로딩 씬 내에서 해당 오브젝트가 활성화된 상태여야 합니다.
GetComponent(): 찾은 오브젝트에서 Slider 컴포넌트를 가져옵니다. 이 컴포넌트를 통해 슬라이더의 값을 업데이트할 수 있습니다.
▣ LoadLoadingSceneAndNextScene()
역할: 로딩 씬(LoadingScene)과 실제 게임 씬(NextScene)을 비동기적으로 로드하며, 로딩 진행 상태를 슬라이더로 표시하는 코루틴입니다.
이 함수는 씬을 비동기적으로 로드하기 때문에 게임이 멈추지 않고 계속 진행되며, 로딩 화면과 슬라이더가 표시됩니다.
▣ 함수 설명:
SceneManager.LoadSceneAsync("LoadingScene", LoadSceneMode.Additive):
비동기적으로 로딩 씬을 로드합니다. LoadSceneMode.Additive는 기존 씬을 유지하면서 추가로 씬을 로드할 수 있는 모드입니다.
loadingSceneOp.allowSceneActivation = false;:
로딩이 완료되더라도 자동으로 씬이 활성화되지 않도록 설정합니다. 이 코드를 통해 슬라이더를 업데이트하는 시간을 가질 수 있습니다.
loadingSlider.value = nextSceneOp.progress;:
NextScene의 로딩 진행도를 슬라이더에 반영합니다. progress는 0부터 1까지의 값으로, 로딩 상태를 나타냅니다.
SceneManager.UnloadSceneAsync("LoadingScene"):
로딩이 완료되면 로딩 씬을 비동기적으로 언로드하여 메모리에서 해제합니다.
▣ SceneManager.LoadSceneAsync()
역할: 지정된 씬을 비동기적으로 로드하는 함수입니다. 이 함수는 게임을 멈추지 않고 백그라운드에서 새로운 씬을 로드하며, 로딩 중에도 다른 작업을 계속할 수 있습니다.
주요 기능:
SceneManager.LoadSceneAsync("NextScene"): NextScene을 비동기적으로 로드하며, 이 과정에서 로딩 진행 상태를 AsyncOperation.progress를 통해 확인할 수 있습니다.
LoadSceneMode.Additive는 씬을 기존 씬과 함께 로드할 때 사용하며, 기존 씬을 유지한 채 추가 씬을 로드할 수 있습니다.
▣ SceneManager.UnloadSceneAsync()
역할: 비동기적으로 씬을 언로드(해제)하는 함수입니다. 씬을 메모리에서 제거하여 리소스를 해제할 수 있습니다.
주요 기능:
SceneManager.UnloadSceneAsync("LoadingScene"): 로딩이 완료된 후, 로딩 씬을 비동기적으로 언로드하여 게임에 불필요한 씬을 메모리에서 해제합니다.
▣ Slider
역할: 유니티 UI에서 슬라이더(바 형태)를 표시하는 UI 요소입니다. 로딩 중에는 슬라이더의 값을 로딩 진행도에 맞춰 업데이트하여 시각적으로 로딩 상태를 표시할 수 있습니다.
주요 기능:
loadingSlider.value: 슬라이더의 값을 설정하여, 로딩 진행 상황에 맞춰 슬라이더가 업데이트됩니다.
슬라이더는 0에서 1까지의 값을 가질 수 있으며, 이를 통해 로딩 퍼센트를 표시할 수 있습니다.
https://docs.unity3d.com/ScriptReference/GameObject.Find.html
https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html
https://docs.unity3d.com/ScriptReference/AsyncOperation-allowSceneActivation.html
https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.UnloadSceneAsync.html
https://docs.unity3d.com/ScriptReference/UI.Slider-value.html
'[ Unity ] > - 유니티 실습' 카테고리의 다른 글
유니티 Camera Following (1) | 2024.09.19 |
---|---|
유니티 PauseMenu (9) | 2024.09.18 |
유니티 GameSettingsUIManager (1) | 2024.09.17 |
유니티 Camera Shake (0) | 2024.09.15 |
유니티 Single RayCast, Multi RayCast (1) | 2024.09.14 |
댓글