수많은 데이터를 불러오거나 처음 프로그램 세팅을 위해서 화면을 가리는 게 필요합니다. 다양한 방법으로 화면을 가리겠지만 로딩 창을 띠워서 화면을 가리는 방식을 가장 많이 사용합니다. 데이터를 내려받거나 올릴 때 실제 데이터가 존재하는 경우는 실제 데이터 기반으로 로딩 바를 구현할 수 있지만, 구현하기 조금 더 복잡하고 반드시 실제 데이터가 다 받아져야 프로그래밍이 정상적으로 작동하는 것이 아니라면 일정 시간의 텀을 두는 로딩 방식을 사용하기도 합니다. 이런 경우 눈가림으로 실제 로딩이 진행되는 것처럼 보이지만 단순 일정 시간이 지나면 로딩이 끝나는 방식입니다. 이 구현 방식은 큰 데이터를 아주 잠깐 받을 때 매우 유용합니다. 큰 데이터를 받을 때 프로그램이 순간적으로 프레임이 떨어지는데, 그때는 로딩 역시 순간적으로 멈추기 때문에 실제 로딩이 되고 있는 착각을 하게 만듭니다. 구현 방식은 단순한데 기능상 크게 차이가 없기 때문에 쉽고 유용하게 사용할 수 있을 것입니다. 구현은 Time.time과 fillAmount를 활용해서 구현합니다.
C# (UNITY 3D)
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 / 퍼센트 표시 / 소수점 표시
'Unity3D > C#' 카테고리의 다른 글
유니티 2D 이미지 무한 평면 회전 (Rotate, eulerAngles) (0) | 2020.10.25 |
---|---|
유니티 아이템 / 스킬 쿨타임 UI 표시 in Script (0) | 2020.10.24 |
Unity 체력바 fillAmount로 구현 in Script (2) | 2020.10.22 |
UI InputField 기본 기능 할당 in Script (contentType/lineType) (0) | 2020.10.21 |
UI Dropdown 기능 할당/삭제 (이미지,텍스트 옵션 추가) in Script (0) | 2020.10.21 |