본문 바로가기

IndianPoker

[01-02] 홈과 로딩에 대해

 

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