Как сделать постобработку в unity

Обновлено: 01.07.2024

Крутой курс по Unity от XYZ School:
bit.ly/3ussd5n

В этом видеоролике я покажу, как сделать свою игру более сочной и более красочной с помощью Post-Processing'a в Unity.
Post-processing - это постобработка и различные эффекты по типу свечения, размытия, цветокоррекции и т.д., которые накладываются на камеру и делают игру более интересной, меняя её облик!
В Post-Proccesing входят такие эффекты как: bloom (свечение), color gradient (цветокоррекция), vignette (виньетка) и т.д.

Если понравился данный урок, то ставь лайк, а если не понравился, то напиши причину!

По вопросам рекламы/сотрудничество: t.me/hello_valli
КАНАЛ В ТЕЛЕГРАМЕ: t.me/icecreameee
ГРУППА ВКОНТАКТЕ: icecream_2020
INSTAGRAM: icecream.url

Музыка из официальной фонотеки TheXvid

Хей, автор учится, и поэтому что-то может не получаться. Заметил ошибку? Красавчик, напиши мне на почту, конструктивная критика делает нас лучше, бро🤙

Как сделать многоуровневую игру в 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

LMHPoly на своём сайте опубликовал статью 7 Tips for Better Lightning. Все советы для Unity 5.6 и выше.

1. Используйте Linear Color Space

Перед освещением проекта важно выбрать цветовое пространство. Предпочтительный Color Space для реалистичного рендеринга - Linear. Линейное освещение не поддерживается на ряде мобильных устройств и даже на некоторых игровых консолях. По умолчанию Unity использует Gamma Color Space. Чтобы изменить цветовое пространство, перейдите в Edit > Project Settings > Player. В Other Settings вы увидите Color Space, замените на Linear. Прочитайте подробнее о Gamma и Linear Color Space здесь.

Gamma VS Linear (Без постобработки)

Gamma VS Linear (С постобработкой)

2. Используйте Global Illumination.

Для более реалистичного результата используйте GI. Это система, которая моделирует отскоки света от поверхностей объектов на другие поверхности (Indirect Light), а не ограничивается только светом, который попадает на поверхность непосредственно из источника света. Подробнее о Global Illumination.

Чтобы включить Realtime Global Illumination, перейдите в Window > Lighting > Settings, появится окно Lighting. Откройте вкладку Scene и включите Realtime GI. Вы можете увеличить разрешение, изменив параметр Indirect Resolution.

Как Baked GI, так и Precomputed Realtime GI имеют ограничение: только у статичных объектов может быть indirect освещение, поэтому свет не будет отскакивать от движущихся объектов на статичные и наоборот. Тем не менее, они всё ещё могут отражать свет через Light Probes.

3. Color Harmony

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

Различные цвета могут резко изменить настроение сцены.

4. Используйте Light Colors

Используйте очень светлые цвета, но не используйте перенасыщенные. Светлые цвета намного приятней для глаз, а также выглядят более реалистично. Посмотрите видео Understand Colors ниже, в котором Andrew Price рассказывает про использование разного света, цветовой схемы и так далее.

5. Изменяйте направление света и тени, чтобы получить различные результаты.

6. Используйте Ambient Color для изменения цвета теней.

Вы можете получить неплохой результат, изменяя цвета теней.

Вы можете сделать это, перейдя в Window > Lighting > Settings, появится окно Lighting. В этом окне откройте вкладку Scene и поставьте Environment Lighting Source на Color. Теперь вы можете изменить Ambient Color на любой другой цвет.

7. Используйте пост-обработку изображения

Используя Post-Processing, вы можете мгновенно улучшить освещение сцены в целом. Результат Unity 5.6 представлен ниже. Я использовал бесплатный Post Processing Stack из Asset Store.

Запущенная игра с управляемым персонажем

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

Я решил не заморачиваться с кодом. Так как я новичок, путевого ничего все равно не напишу. Следовательно, первое время буду использовать готовые ассеты. Устанавливать их можно из официального Asset Store Unity. Не сложнее, чем моды для игр.

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

Создание земли (Terrain)

Создать землю в Unity очень легко.

  1. Добавляем на сцену Terrain (GameObject → 3D Objects → Terrain).
  2. Выбираем ее в окне иерархии слева, а справа в Inspector открываем раздел Terrain.
  3. Здесь выбираем режим Paint Terrain (кисточка), ниже в поле выбираем Raise or Lower Terrain и начинаем рисовать себе горы и овраги доступными кистями. Настраиваем размер и просто водим кисточкой по террейну.
  4. Находим в интернете любую бесшовную текстуру травы. Здесь же, в инспекторе выбираем режим Paint Texture, создаем слой и запихиваем туда эту текстуру.

Мои зеленые горы

И вот у нас уже есть какие-то зеленые горы… Сойдет для начала.

Создание персонажа (First Person Controller)

  1. Идем в Asset Store, находим готовый ассет Mini First Person Controller.
  2. Нажимаем кнопку ADD TO MY ASSETS, соглашаемся с лицензией.
  3. Далее нажимаем OPEN IN UNITY.
  4. В самом Unity у нас открывается Package Manager с этим ассетом. Нажимаем Download, ждем загрузки, затем Import, потом еще раз.
  5. Находим в корневой папке проекта новую папку First Person Controller. Заходим внутрь.
  6. Находим там болванку с названием First person controller full и просто перетаскиваем на Terrain. Немного приподнимаем над землей, чтобы не застрял.

Перетаскиваем готового персонажа на сцену

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

Привет. В этот раз у нас кнопка (Button). Это первый элемент UI, который создан для непосредственного взаимодействия с пользователем, так что он и вправду очень важный. При этом кнопки ещё и довольно частый элемент в интерфейсе. Вы могли видеть в различных меню, инвентарях и других экранах.

Добавляем элемент Button

Я продолжу предыдущий проект, но просто перемещу Text и Image элементы, чтобы они нам не мешали. В следующий раз мы к ним вернемся.

Итак. Уже привычным способом добавляем на канвас кнопку:


В результате этого в центре экрана получаем новенькую кнопку:


Немного много лишнего, в другой раз таки оставлю сцену пустой…

Важной особенностью этого элемента в Unity является то, что текст внутри – это уже знакомый элемент Text. Его мы разбирали. Ещё круче то, что в Button можно положить, допустим, Image, получив кнопку с картинкой.

Инспектор кнопки содержит больше элементов, чем предыдущие, но среди них есть известные компоненты, вроде Rect Transform (положение, размер) и Image (спрайт кнопки).

Из предыдущих уроков мы узнали достаточно чтобы кастомизировать кнопку на свой вкус, например так:


И да, тень и обводка работают и с кнопками.

Компонент Button в Unity

Но разберем же и сам Button:


Чек-бокс Interactable определяет активна ли кнопка. Если флаг стоит, то на кнопку можно нажать, но если его снять, то нажатия больше не сработают (и она вообще ни на что реагировать не будет). Сама кнопка при этом тоже изменит цвет.


Сейчас она неактивна

Transition это переходы для отрисовки кнопки в разных состояниях. Может иметь три варианта: Color Tint, Sprite Swap и Animation.

Color Tint, это когда мы выбираем один спрайт для кнопки, но меняем лишь цвета. Т.е. цветовой переход, как сейчас. У нас есть цвета для нормального состояния, при наведении курсора, при нажатии, при выделении и для неактивного состояния.

Fade Duration это длительность перехода.


Курсор на кнопке*

Sprite Swap позволяет просто выбрать отдельные спрайты для этих же состояний:


Всё ещё на кнопке*

Animation один из самых интересных. Тут можно создать полноценный контроллер анимации и задать отдельные анимации для разных состояний.

Жмём Auto Generate Animation. И сохраняем в новую папку Animations. В результате вы должны получить такой вот файлик:


Двойным кликом по файлу Button открываем Animator и видим готовую конструкцию с различными состояниями. Эти же имена должны быть указаны в самой кнопке.


Добавим анимацию при наведении на кнопку мыши. Пускай… она будет ставать немного больше. Выделяем кнопку и открываем окошко анимации:


Выбираем Highlighted и добавляем переменную Scale:


Анимация будет такая: небольшое увеличение до 30 секунды, а после будет идти уменьшение до изначального размера.


Запускаем и проверяем:

Далее идёт Navigation. Он определяет, как можно будет перемещаться по элементам UI при помощи клавиатуры. None – запрещает управление, далее следуют Автоматический, Горизонтальный, Вертикальный, Явный (Explicit) – позволит самостоятельно определить направление. А Visualize ниже нужен, чтобы отобразить перемещение наглядно:


Вот как тут

Последний блок этого компонента это On Click (). Но для его реализации нужен скрипт, так что отложим это на другой раз.

А с кнопкой на этом всё 🙂 А в официальных обучающих ресурсах есть ещё обучающий материал по кнопкам.

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