Индикаторы во время загрузки сцен
Описание
Мне нужно между переходами сцен сделать панель загрузки. Было бы ещё лучше увидеть там процент загрузки или хотя бы полоску показывающий - сколько осталось.
Вопрос
Каким создать этот панель, чтобы было не только приятно пользователю, но и ещё удобно для меня?
Ответы (1 шт):
Автор решения: Арман
→ Ссылка
Внешний вид
Для начала создаём внешний вид этой панели. Пусть макет будет таким:
Потом доделаем внешний вид:
Уже лучше!
Скрипт
Создаём скрипт и прикрепляем на панели загрузки. Первое что делаем - переход по сценам.
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Loading : MonoBehaviour
{
public int SceneId; //Id сцены которая будет загружена
private void Start()
{
StartCoroutine(LoadingFunction()); //При включении запускаем загрузку
}
IEnumerator LoadingFunction() //Создаём функцию загрузки используя новый поток
{
SceneManager.LoadSceneAsync(SceneId);
yield return null;
}
}
Теперь чтобы управлять процентами и.т.д. пишем:
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class Loading : MonoBehaviour
{
public int SceneId;
private string[] Hints;
public Text ProgressText, HintText;
public Image ProgressImage;
private void Awake()
{
Hints = new string[] //Подсказки во время загрузки
{
"Ваша жизнь длится дольше, когда вы дышите.",
"Почти всегда в третьем этаже пол ниже потолка.",
"Если мужчине зовут Наташа, то это женщина!",
};
}
private void Start()
{
StartCoroutine(LoadingFunction());
HintText.text = Hints[Random.Range(0,Hints.Length)]; //Показываем случайную подсказку
}
IEnumerator LoadingFunction()
{
AsyncOperation operation = SceneManager.LoadSceneAsync(SceneId);
while (!operation.isDone)
{
float progress = operation.progress;
ProgressText.text = $"{( progress * 100 ).ToString("0")}%"; //Процент загрузки
ProgressImage.fillAmount = progress; //Полоска загрузки
yield return null;
}
}
}
Теперь нам надо только отключить этот объект в инспекторе и сделать из него Prefab. Чтобы начать загрузку меняем SceneId и включаем его.


