Как сделать экран загрузки unity
Перейти к содержимому

Как сделать экран загрузки unity

  • автор:

Настройка экрана загрузки Unity Web Player

По умолчанию Unity Web Player показывает небольшой логотип Unity и индикатор загрузки контента. У вас есть возможность настроить внешний вид этого экрана загрузки, включая логотип и сам индикатор процесса загрузки.

Обратите внимание, что изменять изображения экрана загрузки возможно только с Unity Pro .

Есть шесть необязательных параметров, которые можно передать UnityObject , для настройки отображения экрана загрузки Unity Web Player. Вот эти необязательные параметры:

  • backgroundcolor : Цвет фона области контента web player во время загрузки, по умолчанию белый.
  • bordercolor : Цвет границы шириной в один пиксель вокруг области контента web player во время загрузки, по умолчанию белый.
  • textcolor : Цвет текста сообщения об ошибке (например, когда не удается загрузить файл). По умолчанию может быть черным либо белым, в зависимости от цвета фона.
  • logoimage : Путь к индивидуальному графическому файлу логотипа, изображение логотипа отрисовывается по центру области контента web player во время загрузки.
  • progressbarimage : Путь к индивидуальному изображению, которое используется в качестве индикатора загрузки. Изображение индикатора загрузки обрезается, в зависимости от части завершенной загрузки файла, следовательно оно появляется с шириной в 0 пикселей и анимируется к своей исходной ширине. Индикатор загрузки отрисовывается под изображением логотипа.
  • progressframeimage : Путь к индивидуальному изображению, использующемся как рамка для индикатора загрузки.

Все значения цветов должны быть представлены в виде 6-значных шестнадцатеричных цветов.(пр. FFFFFF, 020F16, и т.д.). Пути к графическим файлам могут быть как абсолютными, так и относительными ссылками. Изображения должны быть файлами PNG в формате RGB (без прозрачности) или RGBA (с прозрачностью), c 8-битной глубиной цвета. И наконец, progressframeimage и progressbarimage должны иметь одинаковую высоту.

Вот пример скрипта, который настраивает внешний вид экрана загрузки Unity Web Player. Цвет фона установлен в светло серый ( A0A0A0 ), цвет границы черный ( 000000 ), цвет текста белый ( FFFFFF ) а изображения загрузчика — MyLogo.png , MyProgressBar.png и MyProgressFrame.png . Все параметры сгруппированы в единый объект params и переданы в конструктор UnityObject2.

var params = < backgroundcolor: "A0A0A0", bordercolor: "000000", textcolor: "FFFFFF", logoimage: "MyLogo.png", progressbarimage: "MyProgressBar.png", progressframeimage: "MyProgressFrame.png" >; var u = UnityObject2(< params: params >); u.initPlugin(jQuery("#unityPlayer")[0], "Example.unity3d"); 

Для более детальной информации изучите UnityObject2

Пример использования вышеуказанного фрагмента кода:

   Unity Web Player | "Sample"      

Unity Web Player | WebPlayer

Unity Web Player. Install now!

« created with Unity »

Как правильно сделать экран загрузки?

Суть — сделать экран загрузки между сценами, посреди картинка крутится и снизу надпись сколько процентов прогресс.
Сделал по примеру найденному в поиске, скрипт находится в префабе, префаб деактивирован в иерархии.

public class PrefabLoadScene : MonoBehaviour < private int SceneId; [HideInInspector] public TextMeshProUGUI TextLoad; [HideInInspector] public Image ImageLoad; private float RotationImageLoad = 0f; public void StartScene(int i)< SceneId = i; StartCoroutine(LoadingFunction()); >IEnumerator LoadingFunction() < AsyncOperation Operation = SceneManager.LoadSceneAsync(SceneId); while(!Operation.isDone)< RotationImageLoad += (Time.deltaTime * 100f); float Progress = Operation.progress; TextLoad.text = "Загрузка - " + (Progress * 100).ToString("0") + "%"; ImageLoad.transform.rotation = Quaternion.Euler(0, 0, RotationImageLoad); ImageLoad.fillAmount = Progress; yield return null; >> >

когда нужна другая сцена

prefabLoadScene.gameObject.SetActive(true); prefabLoadScene.StartScene(1);

в итоге экран загрузки включается, но индикатор всегда показывает 90% загрузки и картинка не крутится, причём экран загрузки может стоять мгновение, а может и секунды 2-3, а итог тот же 90%.

Как сделать его правильно?

  • Вопрос задан более года назад
  • 431 просмотр

3 комментария

Простой 3 комментария

freeExec

Выглядит нормально, я даже блин проверил ваш код и он работает. У меня только одно вызывает проблемы: вы спрятали [HideInInspector], вы эти поля где-то из кода выставляете, но зачем?

Zefirot

Zefirot @Zefirot Автор вопроса

спрятали [HideInInspector]

это префаб, в этом префабе 2 поля для картинки и текста, их вставил через инспектор и спрятал чтобы не мешали.

ваш код и он работает.

он то работает, но сразу показывает 90% потом может висеть 2-3 сек и только потом наступает загружаемая сцена.

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

Но я ставил дебаги в авейке и старте (в конце и начале) и они появляются моментально, причём после появления сцены, а после остановки загрузки и до авейка висит сек 2-3.

Так что получается что показывает быстро загрузку до 90% (0.2-0.3сек примерно) и потом висит сек 2-3.

John_Norton

John Norton @John_Norton

Zefirot, может быть попробовать через анимацию сделать, тип когда анимация закончилась начиналась следующая сцена?)

Как сделать экран загрузки unity

Musya1453 06 сен 2013, 14:04

Уважаемые форумчане помогите пожалуйста с экраном загрузки. буду благодарен.

Musya1453 UNIт Сообщения: 65 Зарегистрирован: 01 мар 2013, 13:33 Откуда: Симферополь

Re: Экран загрузки

Glooger 06 сен 2013, 15:13

Чо?
Я сомневаюсь, что, задавая такие вопросы, ты имеешь настолько большой проект, что для загрузки ресурсов нужно больше 0,1 секунды. Или ты начинаешь разработку с экрана загрузки?

Glooger UNIт Сообщения: 118 Зарегистрирован: 04 апр 2013, 08:40

Re: Экран загрузки

Musya1453 06 сен 2013, 15:22

намного больше 0.1 секунды. Я прошу дать мне ответ на вопрос а не критиковать.

Musya1453 UNIт Сообщения: 65 Зарегистрирован: 01 мар 2013, 13:33 Откуда: Симферополь

Re: Экран загрузки

Glooger 06 сен 2013, 16:07

Да без проблем
Что загружаем?

Glooger UNIт Сообщения: 118 Зарегистрирован: 04 апр 2013, 08:40

Re: Экран загрузки

Musya1453 06 сен 2013, 17:28

вообщем есть 2 сцены. Одна меню вторая сама игра. в меню есть кнопки. Когда я нажимаю кнопку начать игру он просто застывает и через 10-15 сек. открывается игра. Так вот мне бы хотелось узнать каким образом можно заменить застывание простой загрузкой. Буду очень признателен и благодарен если подскажите алгоритм.

Musya1453 UNIт Сообщения: 65 Зарегистрирован: 01 мар 2013, 13:33 Откуда: Симферополь

Re: Экран загрузки

seaman 06 сен 2013, 17:49

1. Покупаем ПРО.
2. Для загрузки уровня используем Application.LoadLevelAsync
3. Для вывода прогресса используем AsyncOperation.progress Хотя некоторое время назад прогресс не работал. Тогда придется сочинять свой. Хотя, возможно уже починили.

seaman Адепт Сообщения: 8352 Зарегистрирован: 24 янв 2011, 12:32 Откуда: Самара

Re: Экран загрузки

Musya1453 06 сен 2013, 17:55

Musya1453 UNIт Сообщения: 65 Зарегистрирован: 01 мар 2013, 13:33 Откуда: Симферополь

Re: Экран загрузки

KorsaiR 06 сен 2013, 18:12

если ТС интересует просто замена «зависшей картинки» на что то, то я делаю так:

При нажатии на кнопку старт, отрисовываю какую — либо ГУИШКУ на весь экран(то есть картинка загрузки) ну и отображаю рандомный тест типа советы от разрабов и т.д.

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

KorsaiR Старожил Сообщения: 797 Зарегистрирован: 09 июл 2012, 12:20 Откуда: Новосибирск Skype: pwiliya

Re: Экран загрузки

Glooger 06 сен 2013, 18:52

Думаю мне тоже как нить пригодится, вот:
Синтаксис:
Синтаксис: [ Показать ]
Используется csharp

public class LoadingScreen : MonoBehaviour
{
public Texture2D screenTexture ;
private static LoadingScreen instance ;
private static AsyncOperation syncLevel ;
private static bool doneLoadingScene ;

void Awake ( )
{
if ( instance )
{
Destroy ( gameObject ) ;
return ;
}
instance = this ;
gameObject . AddComponent < GUITexture >( ) . enabled = false ;
guiTexture. texture = screenTexture ;
transform . position = new Vector3 ( 0.5f, 0.5f, 0.0f ) ;
DontDestroyOnLoad ( this ) ;
}

public static void Load ( string name )
{
if ( ! instance ) return ;
instance. guiTexture . enabled = true ;
syncLevel = Application. LoadLevelAsync ( name ) ;
doneLoadingScene = true ;
}

И кстате, как пользоваться AsyncOperation.progress, если во время загрузки фпс 0?
По моему лучше самому организовать загрузку сцены поэтапно, как бэ пакетами

Glooger UNIт Сообщения: 118 Зарегистрирован: 04 апр 2013, 08:40

Re: Экран загрузки

seaman 06 сен 2013, 19:36

seaman Адепт Сообщения: 8352 Зарегистрирован: 24 янв 2011, 12:32 Откуда: Самара

Re: Экран загрузки

Glooger 06 сен 2013, 21:02

АГА! Тогда вот с полоской загрузки
Синтаксис:
Синтаксис: [ Показать ]
Используется csharp

using System.Collections ;
using UnityEngine ;

public class LoadingScreen : MonoBehaviour
{
public Texture2D screenTexture ;
public static LoadingScreen instance ;
public static AsyncOperation syncLevel ;
public static bool doneLoadingScene ;
public static string newLevel ;

void Awake ( )
{
if ( instance )
{
Destroy ( gameObject ) ;
return ;
}
instance = this ;
gameObject . AddComponent < GUITexture >( ) . enabled = false ;
guiTexture. texture = screenTexture ;
transform . position = new Vector3 ( 0.5f, 0.5f, 0.0f ) ;
DontDestroyOnLoad ( this ) ;
}

public static void Load ( string name )
{
if ( ! instance ) return ;
newLevel = name ;
}

IEnumerator LoadCoroutine ( )
{
if ( newLevel == null ) yield break ;
syncLevel = Application. LoadLevelAsync ( newLevel ) ;
yield return syncLevel ;
}

void Update ( )
{
if ( newLevel != null )
{
instance. guiTexture . enabled = true ;
StartCoroutine ( LoadCoroutine ( ) ) ;
doneLoadingScene = true ;
newLevel = null ;
}
if ( syncLevel != null && doneLoadingScene && syncLevel. isDone )
{
doneLoadingScene = false ;
instance. guiTexture . enabled = false ;
}
}

void OnGUI ( )
{
if ( doneLoadingScene ) GUI. Box ( new Rect ( 0 , 0 , Screen. width * syncLevel. progress , 100 ) , syncLevel. progress * 100f + » %» ) ;
}
}

Как поменять загрузочных экран Unity при старте?

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

Далее по пунктам как визуализировать

Ищем пункт Playr (расположен слева) -> и дальше настраивает Splash Screen, можно располагать png и настраивать анимацию и самая Важная функция предпросмотр (Preview) которая позволит Вам посмотреть конечный результат без сборки приложения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *