Индикаторы во время загрузки сцен

Описание

Мне нужно между переходами сцен сделать панель загрузки. Было бы ещё лучше увидеть там процент загрузки или хотя бы полоску показывающий - сколько осталось.

Вопрос

Каким создать этот панель, чтобы было не только приятно пользователю, но и ещё удобно для меня?


Ответы (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 и включаем его.


Работоспособность

→ Ссылка