22

Как создать атмосферный туман в Unity: пошаговое руководство

Ссылка на скачивание всех файлов: https://drive.google.com/file/d/1JMFbpmPtTw0qn_EQdWtqJkBVeQDLXdao/view

Ссылка на мою игру (Steam)

В этой статье мы рассмотрим, как создать атмосферный туман в Unity. Материал состоит из двух частей:

1. Создание тумана.

2. Реализация рассеивания тумана вокруг определённого объекта. (Игрока)

Часть 1: Создание тумана

Что понадобится?

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

Как создать атмосферный туман в Unity: пошаговое руководство Инди игра, Gamedev, Разработка, Инди, Unity, Шутер, Steam, Видеоигра, VFX, 3D, Видео, Без звука, Короткие видео, Длиннопост

Скачать

Шаги создания

Создайте систему частиц

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

Как создать атмосферный туман в Unity: пошаговое руководство Инди игра, Gamedev, Разработка, Инди, Unity, Шутер, Steam, Видеоигра, VFX, 3D, Видео, Без звука, Короткие видео, Длиннопост
Как создать атмосферный туман в Unity: пошаговое руководство Инди игра, Gamedev, Разработка, Инди, Unity, Шутер, Steam, Видеоигра, VFX, 3D, Видео, Без звука, Короткие видео, Длиннопост
Как создать атмосферный туман в Unity: пошаговое руководство Инди игра, Gamedev, Разработка, Инди, Unity, Шутер, Steam, Видеоигра, VFX, 3D, Видео, Без звука, Короткие видео, Длиннопост
Как создать атмосферный туман в Unity: пошаговое руководство Инди игра, Gamedev, Разработка, Инди, Unity, Шутер, Steam, Видеоигра, VFX, 3D, Видео, Без звука, Короткие видео, Длиннопост

Материал системы частиц с текстурой

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

Часть 2: Рассеивание тумана вокруг объекта

Чтобы добиться эффекта, когда туман рассеивается вокруг определённого объекта (например, игрока), нам потребуется немного дополнений в виде шейдера и скрипта.

Сначала скачайте шейдер по ссылке ниже, либо создайте и настройте его:

Как создать атмосферный туман в Unity: пошаговое руководство Инди игра, Gamedev, Разработка, Инди, Unity, Шутер, Steam, Видеоигра, VFX, 3D, Видео, Без звука, Короткие видео, Длиннопост

Ссылка

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

Как создать атмосферный туман в Unity: пошаговое руководство Инди игра, Gamedev, Разработка, Инди, Unity, Шутер, Steam, Видеоигра, VFX, 3D, Видео, Без звука, Короткие видео, Длиннопост

Создайте новый материал, используя скачанный шейдер.

Как создать атмосферный туман в Unity: пошаговое руководство Инди игра, Gamedev, Разработка, Инди, Unity, Шутер, Steam, Видеоигра, VFX, 3D, Видео, Без звука, Короткие видео, Длиннопост

Ниже приведён простой скрипт на C#, который будет передавать значения в шейдер для контроля рассеивания тумана:

using UnityEngine;

namespace _Code.Scripts.VFX

{

public class ParticleSystem_FogAvoidPlayer : MonoBehaviour

{

public Transform player;

public float minDistance = 2f;

public float maxDistance = 10f;

public float updateInterval = 0.1f;

private ParticleSystemRenderer particleRenderer;

private MaterialPropertyBlock propBlock;

private float nextUpdateTime;

private readonly int playerPosId = Shader.PropertyToID("_PlayerPosition");

private readonly int minDistId = Shader.PropertyToID("_MinDistance");

private readonly int maxDistId = Shader.PropertyToID("_MaxDistance");

public void Init(Transform playerTransform)

{

player = playerTransform;

}

void Start()

{

particleRenderer = GetComponent<ParticleSystemRenderer>();

propBlock = new MaterialPropertyBlock();

UpdateShaderParameters();

}

void Update()

{

if (Time.time >= nextUpdateTime)

{

UpdateShaderParameters();

nextUpdateTime = Time.time + updateInterval;

}

}

void UpdateShaderParameters()

{

if (player == null || particleRenderer == null)

return;

particleRenderer.GetPropertyBlock(propBlock);

propBlock.SetVector(playerPosId, player.position);

propBlock.SetFloat(minDistId, minDistance);

propBlock.SetFloat(maxDistId, maxDistance);

particleRenderer.SetPropertyBlock(propBlock);

}

}

}

Применение скрипта

  1. Добавьте скрипт Прикрепите скрипт ParticleSystem_FogAvoidPlayer к системе частиц.

  2. Настройте ссылку на объект в инспекторе укажите ссылку на объект (например, игрока)

Как создать атмосферный туман в Unity: пошаговое руководство Инди игра, Gamedev, Разработка, Инди, Unity, Шутер, Steam, Видеоигра, VFX, 3D, Видео, Без звука, Короткие видео, Длиннопост

Результат:

Ссылка на мою игру

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

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

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"