Degulleo3D/Assets/LIN/Scripts/UI/SwitchingPanelController.cs

71 lines
2.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
using TMPro;
using UnityEngine.SceneManagement;
public class SwitchingPanelController : MonoBehaviour
{
[SerializeField] private GameObject Loading_UI;
[SerializeField] TMP_Text Loading_text;
[Header("애니메이션")]
[SerializeField] private Image fillImage;
[SerializeField] private Image headCapImage;
[SerializeField] private Image tailCapImage;
private CanvasGroup canvasGroup;
private void Awake()
{
canvasGroup = this.GetComponent<CanvasGroup>();
canvasGroup.alpha = 0;
}
IEnumerator LoadScene(string sceneName){
Loading_UI.SetActive(true);
AsyncOperation async = SceneManager.LoadSceneAsync(sceneName);
async.allowSceneActivation = false; //퍼센트 딜레이용
float past_time = 0;
float percentage = 0;
while(!(async.isDone)){
yield return null;
past_time += Time.deltaTime;
if(percentage >= 90){
percentage = Mathf.Lerp(percentage, 100, past_time);
if(percentage == 100){
async.allowSceneActivation = true; //씬 전환 준비 완료
}
}
else{
percentage = Mathf.Lerp(percentage, async.progress * 100f, past_time);
if(percentage >= 90) past_time = 0;
}
fillImage.fillAmount = percentage * 0.01f;
headCapImage.transform.localRotation =
Quaternion.Euler(new Vector3(0, 0, fillImage.fillAmount * -360));
Loading_text.text = percentage.ToString("0") + "%"; //로딩 퍼센트 표기
}
}
public void FadeAndSceneLoad(string sceneName)
{
if (canvasGroup == null) return;
canvasGroup.DOFade(1.0f, HousingConstants.SWITCH_PANEL_AINIM_DURATION).OnComplete(() =>
{
StartCoroutine(LoadScene(sceneName));
});
}
}