Loading Scene은 처음 한 번만 로딩되는 것.
Home은 다시 왔다갔다 할 수 있는 것.
Loading Scene에서 GameManger와 같은 계속 사용할 것들을 불러오고, Home으로 이동한다. Home은 Scene들의 중심으로, 다른 곳들로 오갈 수 있는 다리같은 역할을 한다. 그러니 Home에서 버튼을 통해 다른 곳으로 이동할 수 있도록 이미 버튼 4개를 만들어놓자.(추후 수정될 수 있다.)
처음 Loading Scene이야 기초 세팅을 불러오지만, 그 이외에도 Loading이 필요한 경우는 꽤 많다. Tutorial과 같은 장면 전환시에 불러와야 할 데이터가 많을 수도 있으니, 로딩 바를 만들어보자.
public void LoadScene(string sceneName, bool Activation)
{
LoadingOp = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Single);
LoadingOp.allowSceneActivation = Activation;
}
이 코드는 위의 AsyncOperation으로 선언한 LoadingOp를 LoadSceneasync에 사용한다.
이렇게 하면 LoadScene을 호출해도 메인 화면은 계속해서 원하는 내용을 진행할 수 있다.(비동기의 이유. 동시에 여러 작업이 수행됨)
그리고 allowSceneActivation은 비동기 작업이 끝난 것을 실행할 지, 확인하고 실행할 지를 고르는 것이다. 이걸 이용하여 Loading UI를 띄우는 작업을 진행해보자.
슬라이더를 이용해서 만든 로딩바. 이 로딩바의 값을 연동시켜주고, 속도 제한을 걸어 테스트하기 용이하게 만들 것이다.
로딩바의 값은 loadingBar.value = GameManager.Instance.GetLoadingProgress(); 로, 게임 매니저에서 가져온다.
02. 로딩바 속도 조절
유니티의 로딩바는 이미지상으로 90퍼만 차고나면, 준비가 완료된다.
이를 자연스럽게 바꾸는 코드와 로딩바의 최대 속도를 조절하는 코드를 적어보자.
private IEnumerator LoadingRoutine()
{
while (true)
{
if (GameManager.Instance != null)
{
if (loadingBar.value >= 0.9f)
{
loadingBar.value += loadingSpeed;
if (loadingBar.value >= 1f)
{
BtnLoadingComplete.gameObject.SetActive(true);
}
}
else
{
loadingBar.value += loadingSpeed;
float value = GameManager.Instance.GetLoadingProgress();
if (loadingBar.value > value)
{
loadingBar.value = value;
}
}
yield return null;
}
else
{
yield return null;
}
}
}
게임 매니저 안에 있는 코드는 아래와 같다.
public float GetLoadingProgress()
{
if (LoadingOp != null)
{
return LoadingOp.progress;
}
return 0f;
}
public void LoadScene(string sceneName, bool loadNow)
{
loadingcomplete = false;
LoadingOp = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Single);
if (!loadNow)
{
LoadingOp.allowSceneActivation = loadingcomplete;
}
else
{
LoadingOp.allowSceneActivation = loadNow;
}
}
'IndianPoker' 카테고리의 다른 글
[06] TCP, 클라이언트 만들기 (1) | 2023.10.28 |
---|---|
[05] Thread, Handle Client (1) | 2023.10.28 |
[04] TCP 서버, Thread (0) | 2023.10.26 |
[03] TCP 소켓 준비, Input Field와 UI (0) | 2023.10.26 |
[00] 초기 기획 및 구상 (0) | 2023.10.24 |