본문 바로가기

Unity3D/C#

유니티 시간 기반 가짜 로딩바 구현 in Script (Time.time / fillAmount)

반응형

 

 

수많은 데이터를 불러오거나 처음 프로그램 세팅을 위해서 화면을 가리는 게 필요합니다. 다양한 방법으로 화면을 가리겠지만 로딩 창을 띠워서 화면을 가리는 방식을 가장 많이 사용합니다. 데이터를 내려받거나 올릴 때 실제 데이터가 존재하는 경우는 실제 데이터 기반으로 로딩 바를 구현할 수 있지만, 구현하기 조금 더 복잡하고 반드시 실제 데이터가 다 받아져야 프로그래밍이 정상적으로 작동하는 것이 아니라면 일정 시간의 텀을 두는 로딩 방식을 사용하기도 합니다. 이런 경우 눈가림으로 실제 로딩이 진행되는 것처럼 보이지만 단순 일정 시간이 지나면 로딩이 끝나는 방식입니다. 이 구현 방식은 큰 데이터를 아주 잠깐 받을 때 매우 유용합니다. 큰 데이터를 받을 때 프로그램이 순간적으로 프레임이 떨어지는데, 그때는 로딩 역시 순간적으로 멈추기 때문에 실제 로딩이 되고 있는 착각을 하게 만듭니다. 구현 방식은 단순한데 기능상 크게 차이가 없기 때문에 쉽고 유용하게 사용할 수 있을 것입니다. 구현은 Time.time과 fillAmount를 활용해서 구현합니다.

 

 

C# (UNITY 3D)

 

 

Loading

 

Time.time을 이용해서 3초 동안 로딩되는 예제입니다. 실제 데이터를 기반으로 로딩하는 방식이 아닌 시간을 이용한 가짜 로딩입니다. 퍼센트는 소수점 두 째 자리까지 표시합니다.

 

 

 

using UnityEngine.UI;

 

로딩 진행 상태를 표시할 Text와 Image를 사용하기 위해 UnityEngine.UI 사용

 

Text와 Image 할당

 

 

 

    public Text text_Loading;
    public Image image_fill;
    private float time_loading = 3;
    private float time_current;
    private float time_start;
    private bool isEnded = true;

    void Start()
    {
        Reset_Loading();
    }

    void Update()
    {
        if (isEnded)
            return;
        Check_Loading();
    }

    private void Check_Loading()
    {
        time_current = Time.time - time_start;
        if (time_current < time_loading)
        {
            Set_FillAmount(time_current / time_loading);
        }
        else if (!isEnded)
        {
            End_Loading();
        }
    }

    private void End_Loading()
    {
        Set_FillAmount(1);
        isEnded = true;
    }

    private void Reset_Loading()
    {
        time_current = time_loading;
        time_start = Time.time;
        Set_FillAmount(0);
        isEnded = false;
    }
    private void Set_FillAmount(float _value)
    {
        image_fill.fillAmount = _value;
        string txt = (_value.Equals(1) ? "Finished.. " : "Loading.. ") + (_value).ToString("P");
        text_Loading.text = txt;
        Debug.Log(txt);
    }

 

변수(variable)
text_Loading : 로딩 진행 상황, 퍼센트로 표시 (Text)
image_fill : 로딩 진행 상황, 로딩바로 시각화 (Image)

time_loading : 로딩할 총 시간 (float)
time_current : 현재 진행 시간 (float)
time_start : 로딩을 시작한 유니티 시간 (float)
isEnded : 로딩이 끝났는지 (bool)

 

 

함수(function)
Check_Loading : 로딩이 끝났는지 검사하면서 로딩 진행 상황 표시 (Update, while, for, 등 반복문에서 실행)
End_Loading : 로딩이 끝났을 때 실행
Reset_Loading : 로딩 초기화
Set_FillAmount : 진행 상황 값을 넣고 시각화

 

 

 

유니티 로딩 / Loading Bar / Time.time / fillAmount / 퍼센트 표시 / 소수점 표시

 

 

 

반응형