2D Тени на Unity. Длина тени объекта

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Работа с 2D играми в Unity предлагает упрощенную разработку и лучшую оптимизацию, однако достижение современных стандартов графики в мобильном гейминге с использованием только 2D может быть вызовом. Один из способов преодолеть это ограничение - создание 2.5D эффектов, в частности, реалистичных теней. В этой статье мы рассмотрим, как создать тени с возможностью редактирования их длины для вашей 2D игры. Часть материалов взята из публикации, отдельное спасибо пользователю badcceb

В Unity 2D не предусмотрено ограничения размера тени. Так если мы добавим Light2D => Spot на сцену и будем использовать его как солнце, тени будут бесконечно большие

Финальный результат: с тенью / без тени
Финальный результат: с тенью / без тени

Перенос Проекта на Universal Render Pipeline (URP)

Первым шагом в создании теней для вашей 2D игры является перенос проекта на Universal Render Pipeline (URP) в Unity. Этот процесс начинается с установки URP через Package Manager. Создайте новый URP Asset и активируйте его в настройках проекта (Edit → Project Settings → Graphics). Далее, обновите все материалы проекта для совместимости с URP, используя опцию "Upgrade Project Materials to UniversalRP Materials". Важно сохранить копию вашего проекта перед переносом, чтобы предотвратить потерю данных.

Импорт Библиотеки com.unity.render-pipelines.universal

Следующим шагом является копирование библиотеки com.unity.render-pipelines.universal из Library/PackageCache в Packages. Это делается для того, чтобы обеспечить доступ и возможность редактирования файлов, которые в противном случае были бы ограничены в Unity и перезаписывали на дефолтные значения.

Копируем из Library/PackageCache в Packages
Копируем из Library/PackageCache в Packages

Изменение Скриптов

Теперь необходимо изменить следующие скрипты: Light2D.cs, Light2DEditor.cs, и ShadowRendering.cs. Эти изменения позволяют вам контролировать интенсивность и радиус теней в вашем проекте.

Light2D.cs - Изменения

а) Пройдитесь по скрипту и найдите область m_ShadowIntensity и m_ShadowVolumeIntensity. Добавьте следующее:

[Range(0,1.42f)]

[SerializeField] float m_ShadowRadius = 1.42f);

б) Затем перейдите вниз туда, где указан «Public LightType LightType» и под ним добавьте следующее: public floatshadowRadius { get => m_ShadowRadius; set => m_ShadowRadius = значение; }

Закройте и сохраните Light2d.cs.

Light2DEditor.cs — Изменения

а) Найдите «private static class Styles», и в этой функции добавьте следующее:

public static GUIContent GeneralShadowRadius = EditorGUIUtility.TrTextContent("Shadow Radius");

б) Продвигайтесь вниз по классу, пока не найдете раздел, в котором есть несколько переменных SerializedProperty, и добавьте следующее: SerializedProperty m_ShadowRadius;

в) Перейдите к методу «OnEnable» и добавьте следующее:

m_ShadowRadius = serializedObject.FindProperty("m_ShadowRadius");

г) В методе «DrawSpotLight» добавьте следующее:

EditorGUILayout.Slider(m_ShadowRadius, 0, 1.42f, Styles.generalShadowRadius);

Закройте и сохраните Light2DEditor.cs.

ShadowRendering.cs — Изменения

a) Найдите метод «Public Static Bool RenderShadows», в нем «if (hasShadow)» найдите «var shadowRadius» и отредактируйте код таким образом:

var shadowRadius = light.shadowRadius * light.boundingSphere.radius;

Закройте и сохраните ShadowRendering.cs.

Применение Изменений и Тестирование

После внесения изменений, загрузите ваш проект и добавьте источник света Light2D, выберите Spot. Включите тени и используйте ползунок "Shadow Radius", чтобы наблюдать за изменениями в длине и интенсивности теней.

На объекты, которые должны отбрасывать тени обязательно добавьте ShadowCaster2D

Заключение

Реализация реалистичных теней значительно улучшает визуальное восприятие 2D игр, делая их более живыми и динамичными. Для некоторых игр в 2D, Unity не предусмотрели рисовку теней так как хочет этого разработчик. Надеюсь эта статья поможет кому-нибудь

Дополнительные материалы

Прикрепляю ниже ссылку на папку где хранится com.unity.render-pipelines.universal@14.0.8 с отредактированными скриптами для правильной работы теней

Hidden text

https://drive.google.com/file/d/17i9l7lDfeEy62-saBbcvCv6ZNRQowhBg/view?usp=sharing

Источник: https://habr.com/ru/articles/779180/


Интересные статьи

Интересные статьи

Биография Алана Тьюринга — одна из самых захватывающих и трагических в истории науки. Он с детства отличался от своих ровесников: интересовался математикой, играл в шахматы, изучал кодирование. Одногр...
Еще со школьной скамьи мы знаем, что многим растениям для нормального существования необходим фотосинтез — удивительный процесс преобразования солнечного света в энергию химических связей. Но, как...
Если вы когда-нибудь пробовали воспользоваться в цикле чтения while командой ssh, или, точно так же, командами ffmpeg или mplayer, это значит, что вы сталкивались с неожиданным поведением...
Привет!В этой статье поговорим о генеративно-состязательных сетях, о том, как научить нейросеть генерировать тени на изображении и какие хитрости можно применить для созд...
В случае JavaScript-движка V8 — очень даже. В этой статье я привожу результаты своего маленького исследования эффективности одной из внутренних оптимизаций V8. Читать дальше → ...