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

Ссылка на скачивание всех файлов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ниже приведён простой скрипт на 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: пошаговое руководство

Результат:

15
7 комментариев