Я использовал SceneManager.LoadSceneAsync () AsyncOperation, чтобы создать панель загрузки для моей сцены.Проблема в том, что после того, как полоса загрузки достигает 100%, она останавливается там (я на 99% уверен, что она выполняет предварительное создание пула объектов, который в настоящее время находится в методе Awake ()) в течение нескольких секунд, а затем загружает сцену,Как я могу изменить полосу загрузки, чтобы она учитывала время создания пула объектов?
public class LevelLoader : MonoBehaviour
{
public static LevelLoader instance;
public GameObject screen;
public Slider slider;
public TextMeshProUGUI progressText;
private float oldProgress = 0f;
private void Awake()
{
DontDestroyOnLoad(gameObject);
DontDestroyOnLoad(screen.transform.parent.gameObject);
instance = this;
screen.SetActive(false);
}
public void LoadLevel(int sceneIndex)
{
StartCoroutine(LoadAsync(sceneIndex));
}
IEnumerator LoadAsync(int sceneIndex)
{
AsyncOperation op = SceneManager.LoadSceneAsync(sceneIndex);
screen.SetActive(true);
while (!op.isDone)
{
System.Random rand = new System.Random();
float progress = Mathf.Lerp(oldProgress, Mathf.Clamp01(op.progress / .9f), rand.Next());
// for smoothness (doesn't actually work i think)
slider.value = progress;
progressText.text = (progress * 100f).ToString("f0") + "%";
oldProgress = progress;
yield return null;
}
screen.SetActive(false);
}
}