Как сделать огонь в unity

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Чем больше эффектов в игре, тем красивее игра. Мы с вами добавим в игру различные эффекты, созданные на основе Particle System, а также добавим звуковые эффекты.

Видеоурок

Эффекты прибавляют игре динамичности, делая её куда более интересной. В качестве эффектов можно использовать VFX анимации (Particle System), а также звуковые эффекты.

Если говорить про VFX, то их можно создавать самому, хотя куда более простой вариант скачивать подходящие варианты из Asset Store .

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

Доброго времени суток всем. Сегодня речь пойдет о том, как сделать освещение в 2D игре, при использовании движка Unity3D. На самом деле тема не новая, можно даже сказать, что устаревшая. Но мы решили привнести в эту тему свое решение.

Это решение имело реальное применение в нашей игре DeepOnes

Техническое задание:

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

Когда перед нами стала задача сделать 2D освещения для DeepOnes мы обратился к уже существующим решениям. И спустя некоторое время мы имели в арсенале несколько подходов.

Давайте их рассмотрим по конкретней.

Решение с использованием SpotLight и затемнением материала спрайтов.

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

  1. Создаем новый материал.
  2. Выставляем ему шейдер Sprites>Diffuse.
  3. Добавляем на сцену нужный вам спрайт.
  4. В компоненте Sprite Renderer выставляем в Material наш свежесозданный материал.
  5. Создаем SpotLight(модно и PointLight, но на него криво ставятся световые текстуры(light cookie).
  6. Выравниваем свет относительно нашего спрайта.
  7. В компоненте Transform>Position света значение Z ставим -10(ну или больше).
  8. Настраиваем цвет, интенсивность, длину света(если надо).

Результат которого можно добиться:

Такой результат нас не устраивал, поэтому двигаемся к следующему способу.

Использование плагина 2D Volumetric Lights

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

Конечно смотрится очень красиво. Плагин не сложен в использовании. Но при работе мы столкнулись с тем, что слишком много освещения на сцене заставляют проседать fps, а в 2d платформере это недопустимо. Так что оставим этот плагин на полочке симпатичных ассетов.

И наконец-то гвоздь программы - собственное решение

И так , что же мы использовали для реализации такого света.

  1. Создаем слой Light. Помечаем все объекты на которых должен быть источник света. Например, на персонаже это будет выглядеть именно так.
  1. 2 скрипта. Которые должны висеть на 2D камере.

SpritelightPostRffrct и LightController

Скрипт SpritelightPostRffrct отвечает непосредственно за освещение. Скрипт LightController отвечает за включение/выключение света на определенных уровнях.

Рассматриваю урок Stealth Tutorial, но в Unity 5 туман добавляется по другому (на своем примере):
1. Добавляем на сцену поверхность
2. Создаем для нее материал зеленого цвета (просто чтобы она не была белая)
3. Если теперь добавить туман, то он будет отображаться в окне камеры (на сцене его не будет):
Window ▶ Lighting ▶ Scene ▶ Fog
4. По дефолту установлен режим Linear, поэтому эффекта не ощущается. Чтобы тумал «проявился, нужно установить режим Exponential или Exponential Squared .

Согласно уроку, туман нужно добавлять через Edit ▶ Render Settings и поставить галочку на Fog, а затем выбрать цвет тумана, но в Unity 5.x эти настройки перенесены в Освещение.


Архив со скриптами и шейдером тумана.

Туман, который стелится под ногами, нужно делать уже по другому — с помощью системы частиц (Particle System), но не в этой заметке я не описываю этот урок.

Unity - очень мощный, прогрессивный движок с большим потенциалом. Он обладает множеством уже встроенных функций (в том числе и физическим движком NvidiaPhysX), которые нам, пользователям, прописывать вручную не придется. :)
В этой небольшой статье я бы хотел обсудить физические возможности движка. Итак, начнем:

Что это такое?

За функцией Rigidbody скрывается Абсолютно Твердое Тело (АТТ). Если объяснять грубо и понятно, то АТТ в физике и механике - это идеальное твердое тело, которое под воздействием силы не может менять свои свойства, но может (под ее воздействием) перемещаться в 3х измерениях (вниз, вверх, вперед и т.д., т.е. в наших X-Y-Z осях), а также вращаться в 3х измерениях (опять же по осям X-Y-Z).

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

Какое применение мы можем найти этой функции?

К примеру, для создания автомобиля, кроме Rigidbody нам понадобятся 4 Wheel Collider'а и код (скрипт) , применяющий силовое воздействия к колесам, в зависимости от нажатых клавиш.

Настраиваемые характеристики

  • Mass - Масса нашего объекта в килограммах. Рекомендуется не ставить значения массы в 100 раз больше или меньше масс других АТТ.
  • Drag - Насколько тело подвержено сопротивлению воздуха, когда оно движется под воздействием сил. При значении 0 сопротивления нет, а бесконечное значение мгновенно остановит наш объект.
  • Angular Drag - Насколько тело подвержено сопротивлению воздуха, когда оно вращается под воздействием сил. При значении 0 сопротивления нет, а бесконечное значение мгновенно прекратит вращение нашего объекта.
  • Use Gravity - При включении, объект становится подвержен влиянию гравитации.
  • Is Kinematic - При включении, объект становится не подвержен влиянию физического движка и может изменяться только его функцией Transform. Это может быть полезно для создания движущихся платформ, к примеру.
  • Interpolate - Применяется только в случае, если движения вашего АТТ кажутся вам странными или неуклюжими и т.п.:
    1. None: Интерполяция не применяется
    2. Interpolate: По-сравнению с трансформацией предыдущего кадра (фрейма) , следующий будет сглажен.
    3. Extrapolate: Трансформация текущего кадра сглаживается, по-сравнению с оценочной (примерной) трансформацией следующего.
  • Freeze Rotation - Запрещает любое вращение, как скриптовое, так и при столкновениях. Однако, вращение можно будет выполнять функцией transform.Rotate()
  • Collision Detection - Используется для того, чтобы быстро-движущиеся объекты не проходили сквозь другие объекты, не находя Collision'ов (специальная "сетка" на объектах, которой они сталкиваются друг с другом и с игроком).
    1. Discrete: Значение по-умолчанию для того, чтобы наш объект "замечал" все другие объекты, с которыми может столкнуться.
    2. Continuous: Используйте Discrete Сollision с динамическими объектами столкновения (у которых имеется АТТ), а Continuous Сollision для статических MeshCollider'ов (без АТТ). Режим Continuous Dynamic использует Continuous Сollision для одного конкретного АТТ. Остальные АТТ будут использовать режим Discrete. (Это сильно скажется на нагрузке физического движок, просто оставьте Discrete, если не возникает проблем со столкновением быстрых объектов)
    3. Continuous Dynamic: Используется для объектов в режиме Continuous или Continuous Dynamic Collision. Continuous Сollision также будет использоваться для статических MeshCollider'ов (без АТТ). Для всех остальных используется режим Discrete. Используется для быстро движущихся объектов.

Как мы можем использовать эту функцию?

Базовые знания.

Чтобы использовать АТТ, нам нужен уже созданный игровой объект (GameObject), кликнув на нем, мы проходим в меню по следующему пути: Components - Physics - Rigidbody. Все, АТТ добавлено! :)
Теперь объект подвержен гравитации, к нему можно применять силы с помощью скриптов, но для того, чтобы объект вел себя именно так, как вам нужно, следует добавить Collider или Joint.

Код правит миром.

АТТ взаимодействует с объектами.

Для правильной работы наших АТТ их нужно снабдить Collider'ами (или Collision'ами, как вам будет угодно ^.^).
Подробно о коллайдерах читайте ниже.

Размер имеет значение!

Соблюдайте размеры вашего объекта, ведь они гораздо более значимы даже массы АТТ. Если ваш объект движется неправильно, висит в воздухе или не сталкивается, попробуйте настроить его величину (не АТТ, а самого объекта). При импортировании модели из 3D редактора ее размеры сохраняются, так что будьте внимательны на стадии моделирования и соблюдайте размеры всех моделей.

Дополнительная информация по АТТ

  1. Стандартный размер куба в Unity равен 1 метру, поэтому, проверять размер ваших моделей по нему очень удобно. Чтобы создать куб, выберите в меню GameObject - Create Other - Cube
  2. Относительный показатель Mass определяет, как два объекта будут взаимодействовать друг с другом.
  3. Mass не влияет на скорость падения с высоты, для этих целей используйте Drag.
  4. Чем выше значения Drag, тем больше весит предмет. стандартные значения варьируются от 0.001 (твердый кусок металла) до 10 (перышко).
  5. Если вам нужно изменять объект как с помощью скриптов, так и с помощью физики, добавьте к нему АТТ с параметром Kinematic.

Посмотреть скриптовые примеры воздействия внешних сил на объект с функцией АТТ можно по следующим ссылкам:
AddForce
AddTorque
Для изменения скриптового примера кликните на тексте с названием языка программирования!

Что это такое?

В предыдущем разделе мы рассмотрели принцип работы Rigidbody и упомянули так называемые коллайдеры. Коллайдер для нас - вспомогательный объект в виде сетки простой примитивной или, наоборот, сложной формы, который находится вокруг нашей модели или части модели и взаимодействует с другими объектами, если те тоже окружены коллайдерами.
Чтобы наглядно объяснить знатокам редактора мира *Warcraft 3*, представьте себе импортированную нами модель, которой мы в редакторе дудадов не присвоили текстуры путей - это будет наш объект; а роль коллайдеров тут будут играть блокираторы пути вокруг модели. Естественно, это довольно грубое сравнение, ведь в Unity они гораздо более функциональны. Что-ж, рассмотрим поподробнее.

Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.

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

Закрыт 10 месяцев назад .

Как сделать рывок в юнити3д.


1 ответ 1



Всё ещё ищете ответ? Посмотрите другие вопросы с метками unity3d или задайте свой вопрос.

Похожие

дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.1.28.41306

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