Как сделать игру плавнее unity

Добавил пользователь Евгений Кузнецов
Обновлено: 19.09.2024

Как сделать многоуровневую игру в Unity? Или игру, в которой игрок может перемещаться (телепортировать) между локациями?

Один из наиболее частых вариантов реализации заключается в создании для каждого уровня игры отдельной сцены. Итак, алгоритм создания такой игры следующий.

Шаг 1. Создать сцены для каждого уровня и пр. составляющих игры. Продумать понятную и гибкую систему идентификации файлов сцен

Например, сцены могут иметь следующие имена:

  • StartScene – стартовая сцена игры. Это может быть сцена, в которой игрок знакомится с правилами игры, может изменить некоторые начальные настройки, выбрать персонажа и т.д.
  • Layer1,Layer2,Layer3, … — сцены, соответствующие 1-му, 2-му, 3-му и т.д. уровням игры.
  • EndGame – конечная сцена, которая загружается в финале игры.

Шаг 2. Продумать геймплей так, чтобы было понятно, когда завершается текущий уровень и при каких условиях может быть загружена сцена для следующего уровня или завершения игры

Например, следующий уровень может загружаться при следующих возможных условиях:

а) игрок набрал определённое количество баллов. Это условие имеет смысл проверять каждый кадр в методе Update();

б) игрок добрался до определенного места в игре. Например, пришёл к заданной двери. Соответственно на объекте двери необходимо поставить коллайдер, и при входе в этот коллайдер должна будет выполняться загрузка сцены;

Family Island - меню выбора островов для путешествий и приключений

Family Island — меню выбора островов для путешествий и приключений

Когда речь идёт не столько об уровнях игры, сколько о разных локациях, между которыми игрок имеет возможность перемещаться. Пример такой игры – Family Island – там игрок может путешествовать на различные острова.

Candy Crush Saga — карта игры с выбором уровней

Второй вариант геймплея с аналогичным функционалом – наличие в реализации отдельной сцены с картой игры. Кликая по определённым зонам-кнопкам этой игры, игрок загружает соответствующий уровень (при условии, что этот уровень для него открыт). Наиболее популярный пример такой игры – Candy Crush Saga и ей подобные.

Шаг 3. Написание функции (метода) загрузки соответствующей сцены.

Для загрузки сцен в движке Unity предусмотрен метод LoadScene (…) из класса SceneManager пространства имён UnityEngine.SceneManagement.

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

Далее, при вызове метода следует указывать и имя класса:

У данного метода есть несколько перегрузок (вариантов вызова с различными наборами параметров), подробнее о которых можно почитать в официальной документации Unity.

Наиболее простые способы вызова метода следующие.

Вариант 1 – с явным указанием имени загружаемой сцены в качестве параметра. Например:

Вариант 2 – с указанием индекса загружаемой сцены в качестве параметра. Например:

Индекс – это число-порядковый номер сцены, который автоматически присваивается в окне настроек Build Settings:

Окно настроек Build Settings Unity

Окно настроек Build Settings

Один из возможных вариантов скрипта следующий:

Этот скрипт должен быть на объектах-дверях или телепортах. На них же должен стоять коллайдер-триггер.

Шаг 4. Заполнить раздел Scenes In Build в окне настроек Build Settings, внеся туда все сцены, которые необходимо будет загружать

Пример этого окна представлен выше. Чтобы его вызвать, используется главное меню, пункты File -> Build Settings...


Меню File -> Build Settings… Unity

Во время создания игры, вы должны разместить много различных объектов в вашем игровом мире.

Перемещение, вращение и масштабирование

Используйте инструменты трансформаций в панели инструментов для перемещения, вращения и масштабирования отдельных объектов. Каждый инструмент имеет соответствующее гизмо, которое появляется вокруг выделенного игрового объекта в окне Scene. Вы можете использовать мышь и манипулировать любой осью гизмо для изменения компонента Transform игрового объекта, или Вы можете ввести значения непосредственно в числовые поля компонента в инспекторе. Каждый из трех режимов может быть выбран горячими клавишами - W для перемещения, E для вращения и R для масштабирования.


Вы можете зажать и перетащить центр гизмо для перемещения объекта сразу по всем осям. В центре гизмо перемещения находятся три небольших квадрата, которые можно использовать для перемещения объекта вдоль одной плоскости (т.е. могут смещаться одновременно две оси, в то время как третья будет неподвижна). Если у вас есть третья кнопка мыши, вы можете нажать среднюю кнопку и перетащить курсор, чтобы работать с наиболее часто используемой осью (её стрелка изменится на жёлтую).

Если выбран инструмент вращения, вы можете менять поворот объекта зажав и перетаскивая оси гизмо каркасной сферы, отображаемого вокруг объекта. Так же как и с инструментом перемещения, последняя изменённая ось будет покрашена в жёлтый цвет и может быть в дальнейшем изменена кликом и перетаскиванием средней кнопкой мыши.

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

Обратите внимание, что в режиме 2D, ось Z не может быть изменена в сцене с помощью гизмо. Тем не менее, бывает полезно использовать ось Z в некоторых методах скриптов для других целей; в таких случаях вы все еще можете установить ось Z в инспекторе.

Для получения дополнительной информации о трансформировании игровых объектов, см. страницу компонента Transform.

Переключатели отображения гизмо

Переключатели отображения гизмо( Gizmo Display Toggles ) используются для определения положения любого из них.

Переключатели отображения гизмо

  • Center установит гизмо в центре отображаемых границ объекта.
  • Pivot установит гизмо в позицию пивота Mesh’а.
  • Local установит гизмо для вращения объекта в локальных осях.
  • Global установит ориентацию гизмо по мировым осям.

Привязка к сетке

При перетаскивании любой оси гизмо инструмента перемещения, Вы можете зажать клавишу Control ( Command в Mac) для изменения значения с использованием привязки, определенной в Snap Settings .

Вы можете изменить шаг, который используется для привязки, выбрав в меню Edit->Snap Settings…

Настройки привязки к сетке в окна Scene.

Настройки привязки к сетке в окна Scene.

Привязка к поверхности

При перетаскивании, с использованием центра инструмента перемещения, вы можете зажать Shift и Control ( Command в Mac) для привязки объекта к пересечению с любым коллайдером . Это позволяет очень быстро и точно расставлять объекты.

Вращение взгляда

При использовании инструмента вращения, вы можете зажать клавиши Shift и Control ( Command в Mac) для направления взгляда объекта на точку поверхности любого коллайдера . Это позволяет легко ориентировать объекты относительно друг друга.

Вершинная привязка

Вы можете строить миры еще быстрее с возможностью, которая называется “вершинная привязка”( Vertex snapping ). Эта возможность очень проста, но является очень мощным инструментом в Unity. Она позволяет вам взять один меш за любую вершину и с помощью мышки расположить его в такое же положение вершины другого меша, который вы выберите.

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

Использовать вершинную привязку в Unity достаточно просто. Просто следуйте этим шагам:

Для более детально изучения основных возможностей построения платформенной игры в среде Юнити pro, нужно понимать общее понятие сути платформера.

Платформер (Platformer) – направление компьютерных игр определённого жанра, основной сюжетной линией является прыгание по платформам, взбирание по лестницам, а так же сбор необходимых предметов для завершения уровня. Некоторые с предметов могут наделять персонажей особыми навыками, примеры:

Пример платформера

  • Сила удара;
  • Защитный щит;
  • Огромные прыжки и скорость.

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

Пример платформера Android

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

Что бы закрепить и лучше усвоить информацию, создадим игру для системы Android.

Предварительная настройка под Android

Перед тем как уже сформирована суть и есть примерные наброски сюжета нужно сделать вход и настройку системы:

Создание 2D проекта

Редактор платформера

Поиск и подготовка компонентов

Следующим будет поиск в сети Интернет понравившееся картинки главного персонажа и платформы, и шагаем вперёд:

Настройка главного персонажа

Обучение процесса перемещений

Для того, что бы можно было управлять функционалом героя, нужно заранее сделать обучение. Тут понадобиться:

Первый скрипт программы

Обучение процесса прыжков и вид сопровождение камеры

Что бы задать движения в виде прыжков, нужно зайти в тот же текстовый редактор, где заданы значения перемещений, и прописать:

  • Добавляем новую проверку if (Input.GetKeyDown) (KeyCode.Space)), таким образом задана клавиша Spaces (Пробел) для привода прыжка;
  • Следующее значение задаст силу толчка rb.AddForce (Vector2.up * 8000).

Добавление прыжка персонажу

Созданный персонаж запрограммирован на перемещение и прыжки, но есть проблема, камера стоит в одном положении и не как не двигается за игроком. Решение этой задачи в следующем:

Скрипт для камеры

-10ft выставляется для значения Z, что бы герой не вращался в пространстве.

  • Теперь кликаем на Main Camera и перетаскиваем ссылку на игрока к скрипту Cam Move.

Свойство камеры

Что бы объект ни перемещался по одной платформе, её стоит продублировать:

Таким простым способом созданный прифаб можно копировать, создавая большее игровое пространство и увеличивая уровни сложности. Для клонирования выполняется комбинация Ctrl+D.

Создание точки старта

При компоновке всех частей созданного проекта, иногда возникает вопрос с обратным прохождением уровней с определённой точки. Это так называемая точка старта, откуда игрок, может восстановиться и продолжить игру. Если не задать таких параметров, то предмет, например, в случаи падения с платформы, может падать бесконечно. Для её создания понадобится:

Объект Respawn

Закрепить созданную точку нужно с помощью скрипта:

Скрипт DieSpace

Тест созданной игры

В заключении можно выделить то, что созданный 2Д платформер работает. Здесь нет сложного сюжета, но представлены базовые возможности:

Начнем с самого простого: загрузки и настройки Unity.

Загрузите последнюю версию с официального сайта или торрента и запустите установочный файл.

Выбор редактора в Unity

Полезно знать: невозможно использовать отладчик Visual Studio 2013 Express с Unity. Вы должны иметь Pro версию Visual Studio и купить UnityVS плагин. С версией Express, вы будете иметь лучший редактор кода, но отсутствие отладчика сведет на нет все его достоинства.

Mac OS X

MonoDevelop 4 - существенно лучше, чем старый MonoDevelop 2 в предыдущих версиях Unity. Он, конечно, далек от совершенства, но ничего лучшего под на Mac не придумано.

На каком языке программировать в Unity?

Научиться пользоваться в главным интерфейсом Unity достаточно просто. Вам, может быть, будет страшно в первый раз, когда открываете программу, но уже через несколько часов вы будете чувствовать себя в нем как рыба в воде.

Вот несколько ссылок, которые могут быть вам полезными:

  • Изучение интерфейса Unitys : основа всех основ. Не зная интерфейса, вы не сможете создавать игры в Unity 3D
  • Создание сцены в Unity : изучение этого раздела поможет вам создать свою собственную сцену
Первая сцена. Создаем новый проект.

Выберите меню File , а затем создаqnt новый проект. Не выбирайте нивакой стандартный пакет на первое время. Вы можете повторно импортировать их позже, если вы захотите, просто поначалу они будут просто сбивать вас с толку.

Создание нового проекта в Unity

Выберите 2D настройки. Как и прежде, вы можете изменить этот флаг в настройках проекта позже.

Не беспокойтесь о названии. Оно определяется в настройках, и чтобы изменить имя проекта достаточно просто переименовать папку.

Разметка и панели Unity

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

Пустой проект

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

Чтобы держать все под рукой, советуем создать папки во вкладке Project (Проект). Эти папки будут созданы в папке Assets вашего проекта.

Папки в Unity

Внимание: папка Assets – это место, где хранится все, что вы добавляете во вкладке Project. Она может быть невидимой в Unity, в зависимости от выбранной разметки вкладки (одна или две колонки), но вы сможете увидеть ее, открыв приложение для экспорта файлов.

Вот пример структуры, которую мы используем в наших проектах. Вы можете адаптировать ее под свои предпочтения.

Ассеты проекта

В вашей панели Project, вы можете найти различные типы ассетов:

Префабы

Многоразовые игровые объекты (например: пули, враги, бонусы).

Префабы можно рассматривать как класс в языке программирования, который может быть обработан в игровых объектах. Это некая форма, которую можно дублировать и изменить по своему желанию в сцене или во время выполнения игры.

Сцены

Сцена содержит игровой уровень или меню.

В отличие от других объектов, создаваемых в панели "Проект", сцены создаются в меню "Файл". Если вы хотите создать сцену, нажмите на кнопку "Новая сцена" в подменю и не забудьте потом сохранить ее в папку Scenes.

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

Звуки

Тут все предельно просто. Увидите, если захотите раскидать музыку по разным папкам.

Scripts

Textures

Спрайты и изображения вашей игры. В 2D проекте вы можете переименовать эту папку в "Sprites".

Это неважно для 2D проекта, но, оставив название Textures (Текстуры), вы дадите возможность Unity автоматизировать некоторые задачи. Если вы хотите узнать подробную информацию по этой теме, вы можете прочитать об этом здесь , или здесь .

Заметка о папке Resources : если вы уже работали с Unity, вы знает, что Resources – полезная и уникальная папка. Она позволяет загрузить в скрипт объект или файл (с помощью статичного класса Resources ). Она понадобится нам в самом конце (в главе, посвященной меню). Проще говоря, пока мы не будем ее добавлять.

Наша первая игровая сцена

Панель Hierarchy (Иерархия) содержит все объекты, которые доступны в сцене. Это то, чем вы манипулируете, когда начинаете игру с помощью кнопки "Play".

Каждый объект сцены является игровым объектом для Unity. Вы можете создать объект в главной сцене, или в другом объекте игры. Также вы можете в любое время переместить объект чтобы изменить его родителя.

Логические объекты

Как вы можете видеть здесь, у нас здесь 3 потомка для объекта Level .

Пустые объекты

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

Пустые объекты

Убедитесь, что все они имеют координаты (0, 0, 0) и тогда вы сможете легко их найти! Пустые объекты никак не используют свои координаты, но они влияют на относительные координаты их потомков. Мы не будем говорить об этой теме в этом уроке, давайте просто обнулим координаты ныших пустых объектов.

Заполнение сцены

По умолчанию, новая сцена создается с объектом Main Camera (Главная камера). Перетащите ее на сцену.

Для начала создайте эти пустые объекты:

Scripts Мы добавим наши скрипты сюда. Мы используем этот объект, чтобы прикрепить сценарии, которые не связаны с объектом – например, скрипт гейм-менеджера. Render Здесь будет наша камера и источники света. Level

В Level создайте 3 пустых объекта:

  • 0 - Background
  • 1 - Middleground
  • 2 - Foreground

Сохраните сцену в папке Scenes . Назовите ее как угодно, например Stage1 . Вот, что у нас получилось:

Первая сцена на Unity

Совет: по умолчанию игровой объект привязан к положению родителя. Это приводит к интересному побочному эффекту при использовании объекта камеры: если камера является дочерним объектом, она автоматически будет отслеживать положение родителя. Если же она является корневым объектом сцены или находится внутри пустого игрового объекта, она всегда показывает один и тот же вид. Однако если вы поместите камеру в движущийся игровой объект, она будет следовать за его передвижениями в пределах сцены. В данном случае нам нужна фиксированная камера, поэтому мы помещаем ее в пустой объект Render . Но запомните это свойство объекта камеры, оно может вам пригодиться. Мы подробно остановимся на этой теме в главе "Паралаксный скроллинг".

Мы только что создали базовую структуру нашей игры. На следующем этапе мы начнем делать забавные вещи: добавим на сцену фон и кое-что еще!

Добавляем фон в сцену

Наш первый фон будет статическим. Воспользуемся следующим изображением:

TGPA фон

Импортируйте изображение в папку Textures (Текстуры). Просто скопируйте файл в нее, или перетащите его из проводника. Не беспокойтесь сейчас о настройках импорта.

Создайте в Unity новый игровой объект Sprite на сцене.

Новый спрайт для игры в Unity

Что такое спрайт?

По сути, спрайт – это 2D-изображение, используемое в видео-игре. В данном случае это объект Unity для создания 2D-игр.

Добавляем текстуру спрайта

Unity может автоматически установить фон для вашего спрайта. Если ничего такого не произошло, или если вы хотите изменить текстуру, перейдите на вкладку инспектора и выберите background : (фон)

Выбор спрайта в Unity

Вы должны нажать на маленький круглый значок справа от поля ввода, чтобы появилось Select Sprite (Выбрать спрайт) в Инспекторе

Вид спрайта

Итак, мы создали простой спрайт отображающий облака на небе. Давайте внесем изменения в сцену. В панели Hierarchy (Иерархия) выберите New Sprite . Переименуйте его в Background1 или что-то такое, что легко запомнить. Переименуйте его в Background1 или что-то такое, что легко запомнить. Затем переместите объект в нужное место: Level -> 0 - Background . Измените координаты на (0, 0, 0) .

Фон установлен

Создайте копию фона и поместите его в (20, 0, 0) . Это должно отлично подойти к первой части.

Фон 2

Слои со спрайтами

Следующее утверждение очевидно, но обладает некими неудобствами: мы отображения 2D мир. Это означает, что все изображения на одной и той же глубине, то есть 0 . И вы графический движок не знает, что отображать в первую очередь. Слои спрайтов позволяют нам обозначить, что находится спереди, а что сзади.

В Unity мы можем изменить "Z" наших элементов, что позволит нам работать со слоями. Это то, что мы делали в этом руководстве перед обновлением до Unity 5, но нам понравилась идея идея использовать слои со спрайтами. У вашего компонента Sprite Renderer есть поле с именем Sorting Layer с дефолтным значением. Если щелкнуть на нем, то вы увидите:

Сортировка списка слоев

Давайте добавим несколько слоев под наши нужды (используйте кнопку + ):

Добавить сортировку слоя в Unity

Добавьте фоновый слой к вашему спрайту фона:

Установить сортировку слоя

Настройка Order in Layer - это способ ограничить подслои. Спрайты с меньшим номером оказываются перед спрайтами с большими числами.

Слой Default нельзя удалить, так как это слой, используемый 3D-элементами. Вы можете иметь 3D-объекты в 2D игре, в частности, частицы рассматриваются как 3D-объекты Unity, так что они будут рендериться на этом слое.

Добавление элементов фона

Также известных как props. Эти элементы никак не влияют на геймплей, но позволяют усовершенствовать графику игры. Вот некоторые простые спрайты для летающих платформ:

Спрайты для платформ

Как видите, мы поместили две платформы в один файл. Это хороший способ научиться обрезать спрайты с помощью новых инструментов Unity.

Получение двух спрайтов из одного изображения

Выполняйте следующие действия:

  1. Импортируйте изображения в папку "Текстуры"
  2. Выберите спрайт Platform и перейдите к панели Инспектор
  3. Измените "Sprite Mode" на "Multiple"
  4. Нажмите на кнопку Sprite Editor (Редактор спрайта)

В новом окне ( Sprite Editor ) вы можете рисовать прямоугольники вокруг каждой платформы, чтобы разрезать текстуру на более мелкие части:

Редактор спрайтов

Кнопка Slice в левом верхнем углу позволит вам быстро и автоматически проделать эту утомительную работу:

Автоматическая нарезка

Unity найдет объекты внутри изображения и будет нарежет их автоматически. Вы можете установить дефолтное значение для точки вращения или минимальный размер каждого фрагмента. Для простого изображения без артефактов, это необычайно эффективно. Тем не менее, если вы используете этот инструмент, будьте осторожны и проверьте результат, чтобы убедиться, что вы получили то, что хотели.

В этом уроке проделаем эту операцию вручную. Назовите платформы platform1 и platform2 . Теперь, под файлом изображения, вы должны увидеть два спрайта отдельно:

Результат редактора спрайтов

Добавим их в сцену. Для этого мы будем выполнять те же действия что и для фона: создадим новый спрайт и выберим platform1 . Потом повторим эти действия для platform2 . Поместите их в объект 1 - Middleground . Убедитесь, что их позиция по оси Z равна нулю.

Две новые платформы

Prefabs (Префабы)

Сохранить эти платформы как префабы. Просто перетащите их в папку Prefabs :

Префабы

Таким образом вы создадите Prefab , точно отвечающий оригинальному игровому объекту. Вы увидите, что игровой объект, который вы конвертировали в Prefab , представляет собой новый ряд кнопок прямо под его именем:

соединение префабов

Заметка о кнопках "Prefab": При последующей модификации игрового объекта, вы можете использовать кнопку "Apply", чтобы применить эти изменения к Prefab , или кнопку "Revert", чтобы отменить все изменения игрового объекта в свойстваъ Prefab . Кнопка "Select" переместит выбранные свойства в ассет Prefab в окне проекта (они будут выделены).

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

Теперь вы можете добавить больше платформ, меняющих свои координаты, размеры и плоскости (вы можете поместить их на заднем или переднем плане, просто установите координату Z для платформы на 0 ).

На данном этапе все это выглядит еще сыроватым, но в следующих двух главах мы добавим параллаксный скроллинг, и сцена оживет у нас на глазах.

Прежде чем двигаться дальше, мы модифицируем наши слои, чтобы избежать каких-либо проблем с порядком их отображения. Для этого просто измените позицию игровых объектов по оси Z во вкладке Hierarchy (Иерархия) следующим образом:

Слой Позиционирование по оси Z
0 - Задний фон 10
1 - Средний фон 5
2 - передний фон 0

При переключении из 2D режима в 3D, в окне "Scene" (Сцена) вы будете четко видеть слои:

Кликнув на игровом объекте Main Camera , вы увидите, что флажок Projection установлен на Orthographic . Эта настройка позволяет камере визуализировать 2D игру без учета трехмерных свойств объектов. Имейте в виду, что даже если вы работаете с 2D объектами, Unity по-прежнему использует свой 3D движок для визуализации сцены. Рисунок выше это наглядно демонстрирует.

В следующем уроке:

Вы только что узнали, как создать простой статический фон и как отобразить его должным образом. Затем мы научили вас, как сделать простые спрайты. В следующей главе мы узнаем, как добавить игрока и его врагов.


Это блог про аниме?

Intermedius — находящийся посередине. Думаю, что все, кто смотрел хотя бы одну серию аниме, замечали небольшую вставку в середине, которая обычно служит для перехода между сценами и рекламного блока (англ. - bumper, яп. - アイキャッチ aikyatchi). Картинка из заголовка статьи является таким переходом в одной из серий тайтла “New Game!!", про небольшую игровую студию. Ах да, раз это блог про Unity, то в данном посте мы рассмотрим оформление перехода между сценами именно в нём. =)

Сцены в Unity являются основной единицей деления игры на части и сам по себе переход между ними не является чем-то сложным. Переход реализуется через класс SceneManager, при помощи методов LoadScene() или LoadSceneAsync(), но без дополнительного оформления эти переходы будут резкими и это будет выглядеть странно. Попробуем сгладить этот переход, добавив проекту немного визуальной привлекательности.

Схема довольно проста: обе сцены, между которыми осуществляется переход, должны быть визуально идентичны на момент выгрузки предыдущей и загрузки следующей. Манипуляции для такого перехода обычно организуются через анимацию элементов сцены. Для примера в этом посте мы используем чёрный экран(элементом, отвечающим за данный эффект, будет картинка чёрного цвета). Выгружаемая сцена должна постепенно уйти в чёрный цвет, а следующая за ней плавно из него появиться.

Слово анимация как бы намекает нам на использование механизма в Unity под названием "Mecanim". Если вы не очень с ним знакомы, то можно прочитать(а ещё лучше использовать его в качестве упражнения) предыдущий пост "Шаблон Состояние", в котором, в целях тренировки, этот механизм использовался для создания машины состояний без анимации.

Задача

Оформить переход между тремя сценами через затемнение. Первая сцена появляется моментально и через 2 секунды переходит во вторую. Переходы между второй и третьей зациклены и осуществляется плавно по клику.

Подготовка

  1. Создадим три сцены:
    • BootScene - самая первая сцена, на которую попадает игра, покажем её сразу без затемнения
    • FirstScene и SecondScene - две сцены, переходы между которыми буду зациклены между друг другом
  2. Добавим сцены в Build Settings
  3. Создадим ещё один объект Canvas с именем SceneTransition . Выставим ему Render Mode - Screen Space - Camera и добавим Main Camera . Выставим Order in Layer равным 999 , чтобы он всегда был поверх всего остального
  4. Добавим к SceneTransition объект типа Image и назовём его Fade . Полностью чёрный, перекрывающий всю площадь экрана. Можно его отключить, чтобы он не загораживал экран

Анимация

  1. Создадим папку Animations
  2. Откроем панель Animation . Выделив элемент Fade нажмём кнопку Create и создадим анимацию FadeIn , также создадим анимацию FadeOut
  3. Настроим анимацию FadeIn . Выделяем ассет FadeIn . Убираем галочку Loop Time . Выделяем элемент Fade . В закладке Animation нажатием кнопки Enable/Disable keyframe recording mode включаем запись действий. Включаем компонент Image . Переходим в закладке Animation на отметку в 1 секунду. Выставляем в настройке цвета alpha = 0 . Выключаем компонент Image . В закладке Animation выключаем запись действий. Проверяем анимацию плавного появления UI из затемнения
  4. Настраиваем анимацию FadeOut , но в обратном порядке: включаем Image , альфа-канал от 0 до 100 . Этот пункт остаётся в качестве тренировки
  5. Настраиваем переход между анимациями. Во вкладке Animator добавляем триггер FadeOut . Добавляем переход между FadeIn и FadeOut . На переходе выключаем Has Exit Time , Transition duration выставляем в 0. В Conditions добавляем созданный триггер FadeOut
  6. Создадим скрипт TransitionHandler для переключения сцены после завершения анимации FadeOut

  1. Добавим созданный скрипт к объекту Fade . В конец анимации FadeOut добавим Event . Выберем функцию FadeOutFinished() из скрипта TransitionHandler

Настройка переходов

  1. Для BootScene создадим скрипт, который будет запускать переход на FirstScene через 2 секунды
  1. Настроим BootScene . Добавим префаб SceneTransition . Настроим камеру. Укажем следующую сцену - FirstScene . Отключим анимацию появления сцены
  2. Добавим на сцену пустой объект назовём его BootHandler и добавим соответствующий скрипт. Настроим для нового объекта animator
  3. После запуска BootScene должна иметь затемнение перед переключением
  4. Создадим скрипт ClickHandler для остальных сцен, который будет запускать переход по клику
  1. Настроим FirstScene . Добавим префаб SceneTransition . Настроим камеру. Укажем следующую сцену - SecondScene
  2. Добавим на сцену пустой объект назовём его ClickHandler и добавим соответствующий скрипт. Настроим для нового объекта animator
  3. Настроим SecondScene . Проделываем те же самые шаги, что и для FirstScene , только указываем следующей сцену - FirstScene
  4. Наслаждаемся результатом

Заключение

После всех наших манипуляций мы получили префаб, который можно использовать для настройки переходов между сценами. Навряд ли вы будете его использовать для продакшена, так как используемая синхронная загрузка сцен не очень красивое решение, а также необходима тонкая настройка условий перехода, необходимо продумать остановку игры, в момент начала анимации. Да и сами анимации желательно сделать более интересными, например, в Homescapes(Playrix) переход между загрузкой ресурсов и запуском меню скрыт за опускающейся вдоль стены дома камерой. Однако, после повторения данных шагов собственными руками, у вас должно сложиться представление, как сделать переходы красиво. Пока! =)

Читайте также: