Сообщество - Лига Разработчиков Видеоигр

Лига Разработчиков Видеоигр

8 924 поста 23 151 подписчик

Популярные теги в сообществе:

3

RPG Maker MV/MZ - Добавление языковых локализаций в завершённый проект

Вступление

Я разработал плагин для языковых локализаций, здесь описание поподробнее. Постепенно буду добавлять в него функционал. Если вам нужна какая-то конкретная функция, напишите идею в теме плагина. Также обращу внимание, что в плагине есть функционал по экспорту языковых данных в Excel-таблицу и импорту из неё.

Важный совет. Если вы допускаете, что в вашей игре будет более одного языка (возможно, не сразу, но в будущем), лучше сразу разрабатывать с учётом локализаций. То есть нигде в редакторе не используйте захардкоженный текст, только теги из файлов локализации. Сначала можно прописать только один язык, потом по надобности добавлять другие. Тогда вам не придётся мучаться с экспортом текста из игры.

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

Как-то раз я выполнил такой заказ для игры на RPG Maker MV. Вероятно, решение прокатит и на MZ. Если не сработает, напишите в этой теме.

Задача

  1. Экспортировать текст из игры в JSON.

  2. Сконвертировать JSON в XLSX и отправить получившуюся таблицу переводчику.

  3. Дождаться готового перевода в XLSX формате.

  4. Конвертировать новую таблицу в JSON и внедрить новый язык в проект.

Формат JSON поддерживает произвольную структуру данных. Объекты, массивы, любой уровень вложенности. При этом переводчик с JSON работать не хотел, нужно было ему обеспечить таблицу. Поэтому я решил для хранения данных локализации использовать один JSON-файл с плоским объектом. То есть был только один объект в корне файла, и каждое его свойство было текстовым. Никаких вложенных объектов.

Инструкция

  • Сначала нужно экспортировать текст из проекта. Я написал скрипт, который находит все диалоги (команда "Показать сообщение"), извлекает из них текст и сразу генерирует JSON-файл с нужной структурой. Вот он.

  • Этот скрипт написан на JS. Чтобы его исполнить, можно установить Node.js и запустить скрипт командой node export-localization.js

  • Можно также переписать скрипт на python, bash или другой язык и исполнить удобными вам инструментами. В принципе, скрипт несложный (даже примитивный).

  • В результате мы получим файл с таким содержимым:

{

"<тег>": "<реплика>"

}

  • Теперь забиваем в поисковик: "json to xlsx". Берём любой понравившийся сервис. Например, этот.

  • Скорее всего, мы получим таблицу с 2 строками и большим количеством столбцов. Переводчику будет неудобно работать с такой. Он ожидает 2 столбца: в одном теги, в другой - текст, который нужно перевести (переводчик либо будет редактировать этот столбец, либо добавит новый).

  • Если у вас получилось так, то просто транспонируйте получившуюся таблицу. Это можно сделать и в Esxcel, и в LibreOffice, и в Google Sheets. Не знаете, как? Поищите в интернете, это несложно (конкретная кнопка зависит от инструмента, поэтому тут не пишу, но она точно есть).

  • Отправляем таблицу переводчику, ждём перевода.

  • Теперь новый XLSX нужно конвертировать в JSON. Сначала транспонируем таблицу, чтобы у нас было 2 строки и множество столбцов.

  • Вбиваем в поисковик: "xlsx to json". Опять берём любой подходящий сервис, вроде этого. Конвертируем, получаем новый json-файл.

  • Переименовываем новый JSON-файл, как нам нужно ("en.json", "ru.json" и т.д.).

  • Вставляем в проект, добавляем язык в параметры плагина локализации (здесь конкретные действия зависят от используемого плагина).

Заключение

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

Самое ценное в этой статье - скрипт на экспорт текста, обратите на него внимание. У DK есть инструмент, который извлекает весь текст из игры, но он не генерирует JSON-файл с нужной структурой и уникальными тегами (очень важно, чтобы теги были уникальными).

Надеюсь, мне удалось достаточно раскрыть тему, остались ли вопросы?

Показать полностью
13

Раздача Stylized Windmill Valley, Traditional_Chinese_Style_Park, Environment Lizardman Berserker на Fab.com

Stylized Windmill Valley

ЗАБРАТЬ

Стилизованная Долина Ветряных Мельниц

Стилизованная Долина Ветряных Мельниц — UE5 с 93 ассетами. Существует множество различных типов ассетов, которые помогут вам создавать или улучшать свои окружения.

Демонстрационное видео

ОСОБЕННОСТИ:

Высокое внимание к деталям

Готово к игре / Оптимизировано

Уникальные концепции ресурсов

Высококачественные ресурсы

Включенные форматы

  • Unreal Engine

Технические характеристики

Особенности:

  • Высокое внимание к деталям

  • Готово к игре / Оптимизировано

  • Уникальные концепции ресурсов

  • Высококачественные ресурсы

  • Количество уникальных сеток: 93

  • Столкновения: Да [Автоматически генерируется)

  • Уровни детализации: Да

  • Количество материалов и экземпляров материалов: 127

  • Количество текстур: 215

  • Разрешения текстур: 1k, 2k

  • Поддерживаемые платформы разработки:

  • Windows: Да

  • Mac: Да

Совместимость

  • Поддерживаемые версии Unreal Engine: 5.0 – 5.6

Поддерживаемые целевые платформы

  • Оснащение VR

  • HoloLens 2

  • HTML5

  • Linux

  • Mac

  • Nintendo Switch

  • Oculus

  • PS4

  • SteamVR / HTC Vive

  • Win32

  • Xbox One

  • Windows

Traditional_Chinese_Style_Park

ЗАБРАТЬ

Описание

Этот набор ресурсов представляет собой традиционную китайскую сельскую среду, вдохновленную парком Лей Юэ Крик на юге Китая, история которого насчитывает более 800 лет и восходит к эпохе династии Сун (960–1279 гг. н. э.).

Этот модульный набор включает в себя традиционные китайские архитектурные элементы, включая двери, окна, перила, колонны, кронштейны «дугун» и карнизы «цюэ-ти», что позволяет вам свободно собирать древние деревенские постройки в восточном стиле. В набор также входят:

  • Восточный храм

  • Скальные образования и сельскохозяйственные угодья

  • Декоративный мост

  • Смотровая площадка на берегу реки

  • Две плакучие ивы

  • Гробница и церемониальное святилище рыб

  • Новая версия дополнена: косяком ниагарских рыб, эффектами дождя и системой объемного тумана.

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

Этот пакет ресурсов создан в Unreal Engine 5.3. В некоторых моделях включена поддержка Nanite, и они совместимы со всеми версиями, поддерживающими Nanite. После отключения Nanite проект можно открыть в более ранних версиях. Поддерживается платформа ПК. Плагин HDRIBackdrop включен для динамического освещения.

Плагин NiagaraFluids ВКЛЮЧЕН

Адрес демонстрационного видео 1:

  • Природные ресурсы Quixel Megascans, представленные в демонстрационном видео 1, предназначены только для демонстрационных целей и НЕ являются частью загружаемого контента этого продукта.

  • UE5 我制作的中国乡村风格资产包,烟雨江南鲤鱼溪_哔哩哔哩_bilibili

Адрес демо-видео 2:

  • Демонстрационное видео 2 содержит реальные кадры игрового процесса, встроенные в движок.

Включенные форматы

  • Unreal Engine

    Технические детали

  • Количество уникальных сеток: 205

  • Количество вершин: от тысячи до миллиона

  • Столкновение: генерируется автоматически

  • ЛОДы: (Нет

  • Количество LODов: нет

  • Установлено: Нет

  • Оснащен эпическим или скелет MetaHumans: (Нет)

  • При риггинге на скелет Epic или MetaHumans кости IK включены: (Нет)

  • Количество персонажей: 4 (четыре кои)

  • Количество вершин персонажей: (0)

  • Анимация: (Нет)

  • Количество анимаций: 0

  • Типы анимации: без анимации

  • Количество материалов: 21

  • Количество экземпляров материалов: 204

  • Количество текстур: 377

  • Разрешение текстур: от 2048x2048 до 8192x8192

  • Поддерживаемые платформы разработки:

  • Windows: (Да)

  • Mac: (Да)

  • Примечания: Плагин HDRIBackdrop ВКЛЮЧЕН

  • Плагин NiagaraFluids ВКЛЮЧЕН

  • Документация Ссылка:

  • Важные/дополнительные примечания: Сцена постоянно обновляется и развивается. Надеюсь, она вам понравится.

Совместимость

Поддерживаемые версии Unreal Engine

  • 5.3–5.5

Поддерживаемые целевые платформы

  • Windows

Environment Lizardman Berserker

ЗАБРАТЬ

Персонаж: трис 46 222, верт 27 553

Снаряжен эпическим скелетом

  • Снаряжен эпическим скелетом. Дополнительные кости, добавленные в Epic Skeleton: u_Jaw, u_Tail_01, u_Tail_02, u_Tail_03, u_Tail_04, u_Tail_05, u_Tail_06, u_Tail_07

  • PBR-текстуры Металл/Шерсть

  • 4K-текстуры — Тело, Броня, Топор

  • 1K-текстуры — Глаза

  • Вы можете снизить качество текстур без существенной потери качества.

  • Текстуры — нормальная, металлическая, шероховатость, альбедо, АО, непрозрачность, эмиссионная

  • 4 набора текстур — Тело, Броня, Топор, Глаза

  • Тело имеет 12 цветовых вариаций

  • Шипы для брони имеют 3 цветовых вариации

  • Каждый вид кожи имеет 3 цветовых вариации (всего 6)

  • Штаны имеют 4 цветовых вариации

  • Ткань имеет 4 цветовых вариации

  • Рога имеют 3 цвета Варианты

  • Глаза имеют 4 варианта цвета

  • Топор имеет 3 варианта цвета

  • Цвета можно смешивать для получения нового внешнего вида

Вы можете менять цвет каждой части отдельно.

Снабжено эпическим скелетом, не требует перенацеливания, полностью совместимо с UE4 Mannequin Skeleton. Экземпляры материалов с возможностью смены цвета. Отдельные скелетные сетки для всех частей позволяют легко добавлять или удалять любую часть брони.

Особенности:

  • Снабжено эпическим скелетом (перенацеливание не требуется, оснащено UE4 Mannequin Skeleton)

  • Отдельные скелетные сетки для всех частей позволяют легко добавлять или удалять любую часть брони.

  • Челюсть открывается с помощью дополнительной челюстной кости.

  • Хвост имеет дополнительные кости.

  • Вы можете смешивать цвета тела отдельно.

  • Экземпляр материала для брони и топора для изменения цвета.

Включенные форматы.

  • Unreal Engine

  • Unity

Технические характеристики.

Unreal Engine

Характеристики: (Пожалуйста, предоставьте полный список характеристик продукта.)

Создано с помощью Epic Skeleton (перенацеливание не требуется, установлено с помощью UE4 Mannequin Skeleton).

Отдельные скелетные сетки для всех частей позволяют легко добавлять или удалять любые части брони.

Челюсть можно открыть с помощью дополнительной челюстной кости.

Хвост имеет дополнительные кости.

Вы можете смешивать цвета тела отдельно.

Экземпляр материала для брони и топора для изменения цвета.

  • Риггинг: (Да)

  • Риггинг на эпический скелет: (Да)

  • При риггинге на эпический скелет кости IK включаются: (Да)

  • Анимация: (Нет)

  • Количество анимаций: 7 стандартных демонстрационных анимаций.

  • Количество персонажей: 1

  • Количество вершин персонажей: 27 553

  • Количество материалов и экземпляров материалов: 43

  • Количество текстур: 46

  • Разрешение текстур: Тело, броня, топор — 4096x4096, глаза — 1024x1024

  • Поддерживаемые платформы разработки:

  • Windows: (Да)

  • Mac: (Да)

  • Документация: Нет

Совместимость

Поддерживаемые версии Unreal Engine

  • 4.19–4.27 и 5.0–5.5

Поддерживаемые целевые платформы

  • Win32

  • Windows

  • Mac

  • Xbox One

  • PS4

  • Linux

    Unity

Технические детали

  • БЕЗ HDRP И URP!

  • ТОЛЬКО ШЕЙДЕР ПО УМОЛЧАНИЮ

  • Персонаж: tris 46 222, verts 27 553

  • Создан с использованием Humanoid. Челюсть смонтирована так, чтобы можно было открыть рот.

  • Дополнительные кости, добавленные в Epic Skeleton: u_Jaw, u_Tail_01, u_Tail_02, u_Tail_03, u_Tail_04, u_Tail_05, u_Tail_06, u_Tail_07

  • Простая анимация, перенацеленная в Unity

  • PBR-текстуры: металл/шероховатость

  • 4K-текстуры — тело, броня, топор

  • 1K-текстуры — глаза

  • Текстуры: нормальная, металлическая, шероховатость, альбедо, АО, непрозрачность, эмиссионная

  • 4 набора текстур — тело, броня, топор, глаза

  • Тело имеет 12 цветовых вариаций

  • Шипы на доспехах имеют 3 цветовых вариации

  • Каждый вид кожи имеет 3 цветовых вариации (всего 6)

  • Штаны имеют 4 цветовых вариации

  • Ткань имеет 4 цветовых вариации

  • Рога имеют 3 цвета Вариации

  • Глаза имеют 4 варианта цвета

  • Топор имеет 3 варианта цвета

  • Цвет брони легко смешивается

  • Количество текстур: 46

  • Модель модульная, вы можете добавить или удалить любую часть.

  • Используйте двусторонний материал для брони!

  • Только шейдер по умолчанию

Совместимость

Минимальная совместимая версия Unity

  • Unity 2020.x

Поддерживаемые конвейеры рендеринга

  • Встроенный

Показать полностью 9 2
3

RPG Maker MV/MZ - Обработка нажатий на клавиатуру и мышь

Предисловие

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

Существует несколько способов это делать.

Способ 0

Возможно, вам достаточно будет назначить стандартные действие на нестандартные клавиши. Например, сделать ходьбу по WASD. Для подобного достаточно расширить словарь Input.keyMapper, об этом подробнее в другом гайде.

Способ 1

Небольшая справка: событие - это сообщение, которое возникает при выполнении определённых условий. Например, если пользователь пошевелил мышь или тыкнул по клавише - в системе происходит соответствующее событие.

С помощью функции document.addEventListener(<событие, <функция>) можно назначить функции-обработчики на различные события.

Можно обрабатывать нажатие на клавишу:

document.addEventListener("keydown", keyDownHandler);

function keyDownHandler(event) {

if (Input.keyMapper[event.keyCode] == "ok") {

// Ваш код

}

};

"keydown" - это название события нажатия на клавишу клавиатуры. Внутри функции обработчика мы проверяем, не помечена ли нажатая клавиша, как "ok" в Input.keyMapper.

Однако мы можем действовать свободнее и сверять напрямую с числовым кодом клавиши:

document.addEventListener("keydown", keyDownHandler);

function keyDownHandler(event) {

// 70 - это код клавиши F

if (event.keyCode == 70) {

// Ваш код

}

};

Существуют различные события, которые можно обрабатывать в играх. Вот некоторые:

// Нажатие на клавишу клавиатуры:

document.addEventListener("keydown", keyDownHandler);

// Нажатие на клавишу мыши:

document.addEventListener("click", mouseClickHandler);

// Двойное нажатие на клавишу мыши:

document.addEventListener("dblclick", mouseDoubleClickHandler);

// Игрок пошевелил мышкой:

document.addEventListener("mousemove", keyDownHandler);

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

document.body.addEventListener("mousedown", event => {

if (event.button == 0) {

// Нажата левая кнопка

}

else if (event.button == 2) {

// Правая кнопка

}

else {

// Другая кнопка

}

}

Способ 2

В коде движка есть функции, которые обрабатывают нажатия на клавиши мыши (сюда же относится обработка сенсорного интерфейса).

Во-первых, в rmmz_core.js можно найти функции, которые делают примерно то, о чём я писал выше:

TouchInput._setupEventHandlers = function() {

const pf = { passive: false };

document.addEventListener("mousedown", this._onMouseDown.bind(this));

document.addEventListener("mousemove", this._onMouseMove.bind(this));

document.addEventListener("mouseup", this._onMouseUp.bind(this));

document.addEventListener("wheel", this._onWheel.bind(this), pf);

document.addEventListener("touchstart", this._onTouchStart.bind(this), pf);

document.addEventListener("touchmove", this._onTouchMove.bind(this), pf);

document.addEventListener("touchend", this._onTouchEnd.bind(this));

document.addEventListener("touchcancel", this._onTouchCancel.bind(this));

window.addEventListener("blur", this._onLostFocus.bind(this));

};

TouchInput._onMouseDown = function(event) {

if (event.button === 0) {

this._onLeftButtonDown(event);

} else if (event.button === 1) {

this._onMiddleButtonDown(event);

} else if (event.button === 2) {

this._onRightButtonDown(event);

}

};

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

const Origin_TouchInput_onCancel = TouchInput._onCancel;

TouchInput._onCancel = function(x, y) {

// Ваш код

Origin_TouchInput_onCancel.apply(this, [x, y])

};

Сначала вы выполняем код, после (что важно!) вызываем оригинальный метод. Можно ваш код выполнять после кода движка. Но обязательно вызывайте Origin_TouchInput_onCancel, иначе стандартная обработка нажатия движком не выполнится.

Ещё момент. Напрямую это не относится к тему, но может быть полезно.

$gameTemp.reserveCommonEvent(N);

С помощью этой функции можно вызвать общее событие. N - номер события в Базе данных проекта. К примеру, вы можете по нажатию на какую-то клавишу вызывать общее событие, где и описана ваша уникальная игровая логика.

Вот здесь демо-проект с реализацией такой идеи.

После запуска новой игры попробуйте нажать на F и ПКМ мыши.

Буду дополнять этот гайд по необходимости, пишите ваши предложения и замечания.

Каталог моих бесплатных плагинов для RPG Maker

Показать полностью
9

RPG Maker MV/MZ - Управление по WASD

Добавить поддержку клавиш W, A, S, D клавиатуры легко в MV и MZ.

Для этого достаточно добавить в проект такой код:

(function () {

var replacedKeyMapper = {

87: 'up',

65: 'left',

83: 'down',

68: 'right',

69: 'pagedown',

};

for (code in replacedKeyMapper) {

Input.keyMapper[code] = replacedKeyMapper[code];

}

})();

Здесь мы также "перекинули" стандартный функционал клавиши W на E.

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

У каждой клавиши есть числовой код. Представим, что в движке они помечаются маркерами. Например, стрелка вверх помечена маркером 'up'. Если игрок нажимает на эту стрелку, движок видит срабатывание маркера 'up' и обрабатывает это событие.

Маркеры задаются через словарь. Эта структура данных состоит из пар ключ-значение. Здесь ключ - числовой код клавиши, а значение - маркер. Все ключи уникальные, они не могут повторятся. Значения - могут.

Таким образом, несколько клавиш могут быть помечены одинаковым маркером. Это позволяет нам одновременно поддерживать движение как по стрелкам, так и по WASD.

При желании, вы можете добавлять свои пары ключ-значение в объект replacedKeyMapper из кода выше.

Вот код из файла движка rmmz_core.js:

Input.keyMapper = {

9: "tab", // tab

13: "ok", // enter

16: "shift", // shift

17: "control", // control

18: "control", // alt

27: "escape", // escape

32: "ok", // space

33: "pageup", // pageup

34: "pagedown", // pagedown

37: "left", // left arrow

38: "up", // up arrow

39: "right", // right arrow

40: "down", // down arrow

45: "escape", // insert

81: "pageup", // Q

87: "pagedown", // W

88: "escape", // X

90: "ok", // Z

96: "escape", // numpad 0

98: "down", // numpad 2

100: "left", // numpad 4

102: "right", // numpad 6

104: "up", // numpad 8

120: "debug" // F9

};

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

Есть аналогичный словарь для геймпада:

Input.gamepadMapper = {

0: "ok", // A

1: "cancel", // B

2: "shift", // X

3: "menu", // Y

4: "pageup", // LB

5: "pagedown", // RB

12: "up", // D-pad up

13: "down", // D-pad down

14: "left", // D-pad left

15: "right" // D-pad right

};

Можно также создать обработчик нажатий на клавиатуру и там смотреть на непосредственно код нажатой клавиши. Полезно, если у движка нет подходящего стандартного маркера. Но это уже для продвинутых пользователей ;) Пишите, если нужен гайд по этому.

Коды клавиш легко находятся в интернете. Можно смотреть их, к примеру, тут. Нужны DEC-коды (то есть десятичные).

Ещё важный совет. Не меняйте код движка, не редактируйте стандартные файлы. Мало того, что это запрещено правообладателем, это также неудобно и небезопасно. Что, если вы ошибётесь или захотите откатить изменения? JavaScript позволяет переопределять всё, что удобно. Поэтому для изменения кода движка используйте плагины.

Пишите ваши вопросы в этом треде, если остались.

Каталог моих бесплатных плагинов для RPG Maker

Показать полностью
3

Первый тизер - Clinch Legends

🔥CLINCH LEGENDS - проект, разрабатываемый Antelus Games совместно с Nuama Games.

Приключение про воина в нордическом сеттинге с старыми добрыми механиками из Dragon Age Origins.

Тизер в высоком качестве:

➡️YouTube (https://youtu.be/hd-IaMKg5dg)

➡️VK Видео (https://vk.com/video-225883836_456239257)

И конечно же держите странички:

➡️Steam (https://store.steampowered.com/app/3543340/Clinch_Legends/)

➡️VK Play (https://vkplay.ru/play/game/clinch-legends/)

Добавляйте в желаемое! Дальше будет еще интереснее!

Показать полностью
6

Первый тизер - Clinch Legends

🔥CLINCH LEGENDS - проект, который мы разрабатываем совместно с Nuama Games.

Приключение про воина в нордическом сеттинге с старыми добрыми механиками из Dragon Age Origins.

Тизер в высоком качестве:

➡️YouTube (https://youtu.be/hd-IaMKg5dg)

➡️VK Видео (https://vk.com/video-225883836_456239257)

И конечно же держите странички:

➡️Steam (https://store.steampowered.com/app/3543340/Clinch_Legends/)

➡️VK Play (https://vkplay.ru/play/game/clinch-legends/)

Добавляйте в желаемое! Дальше будет еще интереснее!

Показать полностью
7

Новые фичи в моих плагинах для RPG Maker MZ!

Phileas's Input Sub Windows in Message

Phileas's Input Sub Windows in Message

Phileas's Input Sub Windows in Message - 1.1.0: теперь можно ограничить максимальное кол-во отображаемых опций выбора. Подробнее на форуме.

Phileas`s Audio Manager - 1.1.0: добавлены команды для управления плейлистом. Подробнее на форуме.

Здесь вы можете найти каталог всех моих бесплатных плагинов для RPG Maker по категориям.

Показать полностью 1
23

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

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

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

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

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

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

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

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

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

<a href="https://pikabu.ru/story/kak_sozdat_atmosfernyiy_tuman_v_unity_poshagovoe_rukovodstvo_13017188?u=https%3A%2F%2Fdrive.google.com%2Ffile%2Fd%2F1i5WmcGHpOcsSfiA58nt6KfIXV8lX8BdQ%2Fview&t=%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C&h=0d2cb5a28c6a28e0b683dfa4a958be7beaf658ca" title="https://drive.google.com/file/d/1i5WmcGHpOcsSfiA58nt6KfIXV8lX8BdQ/view" target="_blank" rel="nofollow noopener">Скачать</a>

Скачать

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

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

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

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

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

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

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

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

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

<a href="https://pikabu.ru/story/kak_sozdat_atmosfernyiy_tuman_v_unity_poshagovoe_rukovodstvo_13017188?u=https%3A%2F%2Fdrive.google.com%2Ffile%2Fd%2F1JMFbpmPtTw0qn_EQdWtqJkBVeQDLXdao%2Fview&t=%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0&h=e064e9b893c64e2b9e534aeaeae146f2f8aca978" title="https://drive.google.com/file/d/1JMFbpmPtTw0qn_EQdWtqJkBVeQDLXdao/view" target="_blank" rel="nofollow noopener">Ссылка</a>

Ссылка

Если вы используете шейдер отдельно, убедитесь, что у него правильно настроено имя 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);

}

}

}

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

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

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

Результат:

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

Показать полностью 9 3
Отличная работа, все прочитано!