using UnityEngine; using WI; using UnityEngine.UI; using System.Collections; using UnityEngine.SceneManagement; using TMPro; namespace Samkwang { public class Panel_BranchLoading : MonoBehaviour { public TextMeshProUGUI Text_Branch; public Image Image_BranchThumbnail; public Slider Slider_LoadingProgress; public TextMeshProUGUI Text_Loading; public float progressSpeed; public string nextSceneName; public void Init() { var textDict = transform.GetChildComponentsByName(); Text_Branch = textDict.GetOrNull(nameof(Text_Branch)); var mask = transform.GetComponentInChildren(true); Image_BranchThumbnail = mask.transform.Find("Image_BranchThumbnail").GetComponent(); Slider_LoadingProgress = transform.GetComponentInChildren(true); Text_Loading = Slider_LoadingProgress.transform.parent.GetComponentInChildren(); } public void LoadBranch(UI_BranchLocation branchLocation) { transform.SetAsLastSibling(); gameObject.SetActive(true); Text_Branch.SetText(branchLocation.BranchName.text); Image_BranchThumbnail.sprite = branchLocation.branchThumbnail; nextSceneName = branchLocation.sceneName; StopAllCoroutines(); StartCoroutine(WaitAndLoad()); } private IEnumerator WaitAndLoad() { yield return null; yield return StartCoroutine(LoadNextSceneAsync()); } IEnumerator LoadNextSceneAsync() { AsyncOperation asyncOp = SceneManager.LoadSceneAsync(nextSceneName); asyncOp.allowSceneActivation = false; float displayedProgress = 0f; while (!asyncOp.isDone) { float targetProgress = Mathf.Clamp01(asyncOp.progress / 0.9f); displayedProgress = Mathf.MoveTowards(displayedProgress, targetProgress, Time.deltaTime * progressSpeed); Slider_LoadingProgress.value = displayedProgress; Text_Loading.SetText($"Loading..({(displayedProgress * 100f).ToString("F0")}%)"); if (asyncOp.progress >= 0.9f && displayedProgress >= 0.99f) { Slider_LoadingProgress.value = 1f; Text_Loading.SetText($"Loading..(100%)"); yield return new WaitForSeconds(0.5f); asyncOp.allowSceneActivation = true; } yield return null; } } } }