Серия «Reaper Hunt: Survivor»
Как создать атмосферный туман в Unity: пошаговое руководство
Ссылка на скачивание всех файлов: https://drive.google.com/file/d/1JMFbpmPtTw0qn_EQdWtqJkBVeQDLXdao/view
В этой статье мы рассмотрим, как создать атмосферный туман в Unity. Материал состоит из двух частей:
1. Создание тумана.
2. Реализация рассеивания тумана вокруг определённого объекта. (Игрока)
Часть 1: Создание тумана
Что понадобится?
Для создания тумана используется всего одна текстура, которую можно скачать по ссылке ниже:
Шаги создания
Создайте систему частиц
Добавьте систему частиц в сцену и настройте её параметры. В качестве примера можно взять следующую конфигурацию:
После настройки вы получите атмосферный туман, который можно использовать в ваших проектах.
Часть 2: Рассеивание тумана вокруг объекта
Чтобы добиться эффекта, когда туман рассеивается вокруг определённого объекта (например, игрока), нам потребуется немного дополнений в виде шейдера и скрипта.
Сначала скачайте шейдер по ссылке ниже, либо создайте и настройте его:
Если вы используете шейдер отдельно, убедитесь, что у него правильно настроено имя Reference для передачи значений из скрипта.
Создайте новый материал, используя скачанный шейдер.
Ниже приведён простой скрипт на 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);
}
}
}
Применение скрипта
Добавьте скрипт Прикрепите скрипт ParticleSystem_FogAvoidPlayer к системе частиц.
Настройте ссылку на объект в инспекторе укажите ссылку на объект (например, игрока)
Результат:
Пикабу увеличил количество вишлистов моей игры в 2 раза
Первый пост про мою игру на Пикабу был сделан 23 дня назад, и результат превзошёл все ожидания!
До постов на Пикабу было ~475 вишлистов. А сейчас 1070 вишлистов!
Мой первый пост здесь:
Для сравнения — вот результаты с других площадок:
DTF (самый популярный пост):
Reddit:
Что получилось:
Пикабу — больше всего развёрнутых отзывов и конструктивной критики по игре
DTF — тоже были те, кто давал фидбек после того, как поиграл
Reddit — люди в основном отмечали визуальную составляющую
Каждая платформа дала свой уникальный отклик, и я искренне благодарен всем, кто нашёл время написать отзыв, добавить в вишлист или просто поддержать! 🥰
Особенно приятно, что именно на Пикабу люди не просто лайкают, а реально вникают в проект и дают полезную обратную связь. Это очень ценно для меня как инди-разработчика. 🫡
Ещё раз спасибо вам всем! 🙏
Страница игры в Steam: https://store.steampowered.com/app/3551540/Reaper_Hunt_Survivor/
(WIP) Добавил взрывчатые бочки в свою игру, что думаете?
Страница игры в Steam: Ссылка