Я знаю, что большинство людей, играя в видеоигры, не рады видеть загрузочный экран. Они медленные, и вы просто хотите играть. К сожалению, иногда они необходимы. Если вы начинаете разработку игр, создаете 3D-окружения и понимаете, что загрузка следующей сцены может быть немного медленной, пришло время научиться самостоятельно добавлять загрузочный экран.

Обычно при загрузке сцены в Unity у вас будет сценарий, который имеет что-то вроде «SceneManager.LoadScene(2)» или любой другой сцены в настройках сборки, которую вы хотите загрузить. Когда необходим загрузочный экран, он должен быть отдельной сценой. Создайте новую сцену, назовите ее «Loading_Screen» или что-то подобное и добавьте ее в настройки сборки.

С этой настройкой мы собираемся перейти из меню сцены в главное, но нашей сценой загрузки будет загрузочный экран. В вашей новой сцене загрузочного экрана добавьте немного искусства на задний план, если хотите. Если у вас нет профессионального искусства, вы всегда можете использовать пустой цветной экран и использовать текстовый объект, чтобы написать «Загрузка…»

Затем сделайте два изображения. Опять же, это может сделать художник, но все, что вам нужно, это прямоугольники сплошного цвета, которые проходят через экран. В примере мы сделаем их красными и желтыми.

Один из прямоугольников будет использоваться в качестве фона, так что после того, как он будет сделан и растянут, он может остаться как есть. В другое изображение будут внесены некоторые коррективы. Во-первых, убедитесь, что в Иерархии он находится ниже фона на холсте. Чем ниже на холсте, тем ближе он к экрану.

Посмотрите на инспектор изображения прогресса. Вы заметите, что можете изменить тип. Нажмите на него и сделайте его «Заполненным». «Метод заполнения» должен быть «Горизонтальным», а «Начало заливки» — «Слева». Это означает, что прогресс будет заполняться слева направо. Вы даже можете поиграть с переключателем «Сумма заполнения» и посмотреть, как это выглядит.

Этот объем заполнения — это то, что мы собираемся использовать в наших интересах в части кодирования этой задачи. Загружайте свое меню или первую сцену напрямую в сцену загрузки, а не в ту сцену, которую вы на самом деле хотите загрузить. В сцене загрузки мы напишем новый скрипт.

Очевидно, у сцены загрузки есть цель. Предполагается, что игроку будет на что посмотреть, пока загружается следующая сцена. Как следующая сцена может начать загрузку, пока эта сцена показывает движущееся изображение. Вот тут-то и появляются асинхронные операции. По сути, есть набор функций, которые могут выполняться одновременно со всем остальным. Один из них загружает сцену, и мы собираемся настроить его прямо сейчас.

Во-первых, получите ссылку на изображение прогресса и создайте IEnumerator, который будет загружать следующую сцену. Пусть этот IEnumerator вызывается из Start().

Теперь наступает важная часть. Вы собираетесь создать AsyncOperation и назначить ее для загрузки сцены игрового процесса. Затем используйте цикл While, чтобы проверить, завершена ли операция. Пока его нет, двигаем прогрессбар и кидаем выход. В AsyncOperations также есть переменная под названием «прогресс», которую можно использовать для установки правильной степени заполнения изображения. В целом это должно выглядеть примерно так.

Попробуйте это и посмотрите, как это выглядит. Как только вы это сделаете, вы можете изменить изображение на то, что хотите. Поэкспериментируйте с типами заливки или даже с анимацией. Загрузочные экраны могут быть веселыми!