Как сделать тайлы для игры

Как сделать тайлы: пример из Fossil Hunters

Kak sdelat krasivye taily

Предлагаем вашему вниманию перевод статьи из блога Райана Миллера (Ryan Miller), технического директора небольшой канадской студии Reptoid Games. Райан рассказывает о том, каким путем была разработана система тайловой графики для Fossil Hunters.

В этой игре необходимо откапывать окаменелые части динозавров и самостоятельно собирать из них скелеты.

Попытка №1: Классика 16-4

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

kak my sdelali taily 2

16 конфигураций, 4 соседа = метод 16-4.

Это отличный вариант в случае 2d / пиксель арта, но мы пришли к мнению, что отсутствие поддержки внутреннего угла портит внешний вид. Углы, о которых идет речь, отмечены красным на рисунке ниже.

kak my sdelali taily 3

Мы могли бы создать дополнительные тайлы с внутренними углами, но это привело бы к экспоненциальному росту их общего количества. Если тайл определяется лишь 4 соседями, для его выбора необходимо предоставить 16 вариантов дизайна, а если тайл определяется 8 соседями (добавляются угловые), число вариантов возрастает до 81!

Давайте поищем другой вариант.

Попытка №2: Тайлы с границами

Чтобы избежать необходимости создания большого набора дизайнов, я остановился на методе, который называю «Тайлы с границами». Вы можете увидеть его реализацию в игре Spelunky. Здесь потребуется меньше ресурсов, чем для традиционного метода 16-4 (технически, достаточно только 1 тайла и 1 границы). Суть метода заключается в том, что сначала рисуют бесшовные тайлы, а их видимые края закрываются элементами-границами.

kak my sdelali taily 4

Дополнительным преимуществом этого метода является то, что он позволяет использовать тайлы разных размеров (не только 1×1), что делает тайлсет интереснее на вид и помогает бороться с монотонностью.

Мне особенно нравится эта статья, где метод объясняется более подробно.

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

Попытка №3: Воксельная сетка

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

Но начав экспериментировать с вокселями, я выяснил для себя три вещи:

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

Наконец-то успех!

Поиск баланса между красивой графикой и затратами на ее реализацию оказался более сложным, чем я предполагал. Не придется ли пожертвовать качеством графики, чтобы разработка продолжалась? И тут я внимательнее присмотрелся к методу 16-4.

kak my sdelali taily 5

Раз вся проблема в том, что для него требовалось много графических ресурсов, нет ли возможностей уменьшить их число?

Я мог бы убрать те тайлы, которые являлись повернутыми версиями других, и вместо этого прописать вращение в движке. Вместо 16 тайлов я получу 6. Не плохо, но думаю, что можно и лучше. Тем более, что внутренние углы опять остались без внимания.

kak my sdelali taily 6

Еще немного подумав, я обратил внимание, что на самом деле есть всего лишь три фигуры: углы, края и серединки. Смотрите сами.

kak my sdelali taily 7

kak my sdelali taily 8

kak my sdelali taily 9

На этих картинках заметно, что каждый тайл можно составить из 4 частей, в которых в различных комбинациях входят наши три фигуры.

kak my sdelali taily 10

Что, если вместо цельных тайлов мы будем использовать 4 части, соединенные вместе при помощи кода? И к ним теперь можно добавить внутренний угол. Думаю, мы нашли решение.

Наш победитель – метод 8-4-4

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

Я уже упоминал, что сам придумываю все названия? В имени метода 8-4-4 упомянуты компоненты, используемые этой системой:

Конфигурация тайла в соответствии с таковыми у его ближайших соседей в этой системе изменяется простым набором команд:

a. Проверить 3 соседних (например, для СВ проверить С, СЗ и З)

b. Подставить сабтайл с сеткой типа Середина, Внешний угол, Внутренний угол или Край

c. Правильно повернуть

kak my sdelali taily 11

Чтобы не было видно швов, края тайловых сеток необходимо точно выровнять. Это проще сделать при моделировании геометрии, а не при UV-развертке. Что подводит нас к следующему пункту…

Отображение текстур

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

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

kak my sdelali taily 12

Ужасно не выглядит, но когда много одинаковых тайлов оказываются рядом, повторение заметно очень сильно. Я немного экспериментировал с заменой крупных внутренних кусков. Область 2×2 с сеткой типа Середина заменялась одиночным тайлом. Но этот метод оказался неудобным в плане создания ресурсов и ухудшал производительность.

На помощь приходят шейдеры

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

В трипланарной проекции положение сторон многоугольника сравнивается с направлениями трехмерных координат X, Y, Z и в соответствии с ними выравнивается по координатам UV. Метод отлично подходит для полигонов с гранями, перпендикулярными X, Y или Z (например, для тайлов!).

kak my sdelali taily 13

Метод трипланарной проекции

Как сомкнуть соседние поверхности

Как только в игре появились различные типы тайлов, обнаружилось, что между образованными ими поверхностями есть зазор. Технически это правильно, ведь при тайлинге разные наборы не учитывают поведение друг друга. Но мне хотелось, чтобы поверхности смыкались и перекрывались.

kak my sdelali taily 14

«Канавки» между поверхностями

Я рассмотрел еще один набор угловых сеток, которые отвечали бы за переход к другим типам поверхности, но потом понял, что сабтайлы можно просто растянуть поверх соседей. Еще один плюс этого метода!

kak my sdelali taily 15

Перекрытие тайловых поверхностей

kak my sdelali taily 16

Анатомия тайла и его растянутых сабтайлов

Инструменты редактирования

Какой геймер не любит хорошие редакторы уровней? Мы хотели, чтобы каждый тайл поверхности можно было нарисовать мышью прямо в игровом кадре.

Первым шагом к этому служит внутрикадровый перехват кликов. Из OnSceneGUI мы добываем класс Event.current и проверяем его значение – MouseClick или MouseDrag. Далее при помощи функции Raycast опускаем луч на воображаемую поверхность Plane и так получаем координаты виртуального пространства, где произошел клик. Теперь мы знаем, куда поместить тайл.

Осталось надо создать интерфейс, в котором разместится палитра для выбора тайлов. Я добавил в него еще немного других утилит.

kak my sdelali taily 17

Вот и все! Или не все?

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

Источник

Введение в новую систему тайловых карт Unity

c9467ef7c3ac69be35fea0375965760d

Знакомство с систему двухмерных тайловых карт Unity даёт отличную возможность экономии времени инди-разработчиков и игровых студий на прототипирование и создание качественных 2D-игр.

Без этой системы можно потратить дни, если не недели на написание собственной системы тайловых карт или переработку чужой. И это только программирование, а как насчёт редактора тайловых карт?

Новая система бесплатна и встроена непосредственно в редактор Unity. Она предоставляет множество возможностей, которые мы рассмотрим в этом туториале.

В этой статье мы воспользуемся простой тайловой 2D-игрой, чтобы узнать следующее:

Примечание: в этом туториале подразумевается, что вы хорошо умеете работать в редакторе Unity. Если вы считаете, что недостаточно в нём освоились, то в туториале Introduction to Unity есть всё необходимое для изучения этого туториала. Кроме того, вам необходима версия Unity 2017.3 или выше.

Что такое тайловая игра?

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

Коллекция имеющихся в игре тайлов называется «тайлсетом», и каждый тайл обычно является спрайтом, частью листа спрайтов (spritesheet). Если вы хотите лучше разобраться с листами спрайтов, то у нас есть туториал, в котором описываются листы спрайтов Unity.

Как можно увидеть в этом туториале, обычно тайлы являются квадратами. Но они могут принимать и другую форму — прямоугольники, параллелограммы или шестигранники. В играх обычно используется вид сверху или сбоку, но иногда в тайловых играх применяется и 2.5D.

Возможно, вам уже известны две самые популярные игры, в которых используется система тайловых карт: Starbound и Terraria.

aac4288ee7c7868202364a050a82e34a

650d2ddb41661d2b4ae2b948fccee019

Приступаем к работе

Запустите редактор Unity и загрузите проект Rayzor-starter из распакованных материалов проекта.

Вот, с чем вы будете работать в этом проекте:

2e3ae3784a7e0cda552c51902367eb8a

Создание игры

Откройте сцену Game из папки Scenes.

Нажмите на кнопку Play в редакторе, чтобы запустить игру. В окне Game перемещайте героя клавишами WASD или «стрелками».

20e1a18a8e44d9eeef984cb19e43527e

Пока герой бродит по кажущемуся бесконечным фону камеры с цветом #00000, потерявшись в пустоте.

Чтобы исправить это, нам потребуются инструменты 2D-тайлов для построения интересных уровней и механик игры.

Знакомимся с палитрой тайлов

e9c4c46814518dadf262f42ceab70563

Это окно станет вашим лучшим другом при работе над тайловыми играми в Unity.

ab3a35339e71da7a385d6c778abd4f7d

Нажмите на Create и выберите сохранение новой палитры в папке Assets\Palettes проекта. В ней создайте новую папку RoguelikeCave.

Теперь структура папок вашего проекта должна выглядеть так:

36208733a60c0a788173c9cb199a1423

В окне редактора Tile palette должна быть выбрана RoguelikeCave; на этом этапе у нас всё ещё нет никаких тайлов:

9f80f3e894a6a3d64c3f9951b03046e5

Как художник может творить свои шедевры, если у него нет материалов?

Не закрывая окно Tile Palette, выберите папку проекта Sprites/roguelike-cave-pack и разверните ассет roguelikeDungeon transparent.png. Затем выделите все спрайты в этом листе спрайтов: выберите первый спрайт, зажмите shift и выберите последний спрайт.

Перетащите все выбранные спрайты в окно Tile Palette RoguelikeCave:

055d5baae6a8c222f66f0fec36824e05

Перетащив спрайты в окно Tile Palette, выберите в Unity место для хранения ассетов.

Создайте в Assets/Palettes/RoguelikeCave новую папку Tiles и выберите эту папку в качестве места хранения:

16f6093279a3a3b3c5c728ebdcd07afd

Unity сгенерирует тайловый ассет для каждого спрайта, добавленного из листа спрайтов. Дождитесь завершения процесса, затем увеличьте размер окна Tile Palette и полюбуйтесь на ровные ряды красивых новых тайлов, расположившихся в палитре RoguelikeCave:

27dc87f368115a032b42d4b8058bdd1d

Повторите описанный выше процесс для создания палитры тайлов с помощью окна Tile Palette, но на этот раз назовите новую палитру RoguelikeCustom.

Поместите новую палитру в новую папку. Назовите папку RoguelikeCustom и переместите её в папку Assets/Palettes проекта.

На этот раз, воспользовавшись описанным выше процессом, используйте спрайты из листа Assets/Sprites/roguelike-custom/roguelike-normal-cutdown-sheet.png для заполнения тайлами новой палитры. Создайте внутри папки палитры RoguelikeCustom папку Tiles и переместите ассеты тайлов туда:

402c0dfb6ca659f755ba63cafa6c288b

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

782ed3b0f5bc2546c2116c07f9652f7f

Создание сетки карты тайлов

Откройте меню GameObject в верхней части редактора Unity (или панель меню Unity, если вы работаете под MacOS), нажмите на 2D Object, а затем Tilemap, чтобы создать новую сетку Tilemap:

25999de4efb34557bac40669f988fcdd

Вы должны увидеть, что в иерархию сцены добавился новый GameObject Grid. Разверните его и выберите встроенный GameObject Tilemap.

Воспринимайте этот объект Tilemap как слой (возможно, один из многих) вашей игры. Можно добавить новые объекты для создания дополнительных слоёв Tilemap.

В инспекторе вы увидите два компонента, которые Unity автоматически добавила к этому GameObject:

1a0f583faa33dfc44002dde103c8d97e

Использование различных инструментов рисования палитры тайлов

Переключитесь в редакторе на режим Scene.

Не закрывая окно Tile Palette, выберите палитру RoguelikeCave, а затем выберите инструмент brush (или нажмите B). Выберите тайл песка, как показано ниже:

dcd44ccb47904a96bcae52075ea37e3e

В окне Scene переместите курсор на сетку рядом с игроком. Кисть с тайлом песка будет привязываться к сетке.

Зажав и удерживая левую клавишу мыши, нарисуйте вокруг игрока прямоугольную область. Она будет отрисована на слое Tilemap BaseLayer:

3c56d606885a624960d5ed83106893dd

Рисование больших областей может оказаться монотонным занятием, поэтому существует кисть Filled Box, которую можно использовать для закрашивания крупных площадей. В окне Tile Palette нажмите на квадратный значок кисти (или нажмите U).

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

85df5f35c7f37f325e814568d970553f

Хотя мы добавили в игру немного цвета, это песчаное подземелье выглядит уныло. Настало время добавить немного деталей!

0744a8b330652fe6f4ba7b3939d987ec

В окне Tile Palette переключите Active Tilemap на слой DungeonFloorDecoration:

272dc387cdf5f84261eebf6da3dde2a9

Выберите инструмент brush (B), затем нарисуйте в окне Scene разбросанные на карте объекты:

bbb4ddf6b3f5ba0393f5a6d3d04254eb

Отключите, а затем снова включите в иерархии GameObject DungeonFloorDecoration, чтобы увидеть, как отрисовка на активном Tilemap изменяет слой DungeonFloorDecoration, а все отрисованные тайлы попадают на этот новый слой:

fe34163a070ac1c85f8d0aee80356a90

Переключите Active Tilemap в окне Tile Palette на Collideable. Выберите инструмент brush (B), а затем нарисуйте следующие тайлы, чтобы построить вокруг игровой области стену. Выделенные красным зоны на изображении ниже — это новые части, которые нужно добавить:

3f07e30041691b855a4d1870d69f2e34

Посмотрите на показанный ниже скриншот окна Tile Palette, чтобы разобраться, где найти тайлы, необходимые для постройки стены. Не забывайте, что можно использовать сочетания CTRL-Z или CMD-Z для отмены действия или стирать ошибки с помощью текущей кисти (удерживая Shift):

c9467ef7c3ac69be35fea0375965760d

Запустите игру в редакторе и попытайтесь пройти сквозь стену:

49d6fbe88e6368ae9d9d47caa6ed2ece

Вы ведь не этого ожидали?

Проблема в том, что мы просто нарисовали стандартные тайлы и пока не применяли к слою Tilemap волшебную физику Unity.

Выберите GameObject Collideable и добавьте новый компонент, нажав кнопку Add Component в окне Inspector; в поле поиска введите Tilemap Collider 2D:

15e7ec614a110e3de5020f7b5f6a2d4d

Этот компонент был создан специально для тайловых 2D-игр на Unity. Он просто применяет форму физического коллайдера ко всем тайлам слоя, к которому он был добавлен, не выполняя никакой другой работы.

Снова запустите игру и попробуйте пройти сквозь стену. Доступ запрещён!

2b28f1a3a2f60422649719e084a9fd08

Примечание: иногда при движении камеры можно заметить между некоторыми тайлами небольшие чёрные линии. Похоже, что это проблема движения камеры в проектах с системой 2D Tilemap Unity. От неё можно почти полностью избавиться, отключив Anti-Aliasing в параметрах графики. Однако даже если это сделать в проекте-заготовке, эффект всё равно слегка заметен. Решением этой проблемы может стать добавление собственного скрипта движения камеры с пиксельным смещением. Хорошее обсуждение этой проблемы можно найти здесь.

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

4ea3f8af32c2e23852a146578a7f9f49

Вокруг каждого тайла есть коллайдер. Средним секциям стен не нужны эти дополнительные коллайдеры.

Выбрав GameObject Collideable, добавьте к нему компонент Composite Collider 2D. Это также автоматически добавит RigidBody2D.

Задайте параметру BodyType RigidBody2D значение Static, а затем поставьте флажок Used by Composite в компоненте Tilemap Collider 2D:

2ca12b9e01baa5b477288bc06cf546cf

После этого вы заметите, что эти ненужные квадратные коллайдеры посередине стен исчезнут.

Завершите создание стен, достроив их вверх и замкнув наверху, высотой примерно в 16 тайлов. Не забывайте. что в качестве Active Tilemap окна Tile Palette должен быть выбран Collideable:

7e633f81d090fd304dcee26abb4cf760

Участок подземелья не будет представлять никакой сложности для нашего героя без препятствий. Теперь мы начнём работу над созданием комнаты смерти, дополненной красивыми древними мраморными коридорами. После преодоления всех этих препятствий игрока ждёт награда — гора золота.

Для отрисовки этих коридоров мы воспользуемся специальной тайловой кистью Rule Tile. Как вы видели в начале туториала, в проект уже добавлены дополнительные тайловые скрипты из Github-репозитория Unity 2D Extras. Одним из них является Rule Tile.

Rule Tile позволяет нам задавать правила о том, какие тайлы нужно отрисовывать в зависимости от соседних располагаемых нами тайлов.

70242b66c05805fb9a147521da24aa89

546707124181cac98c682dfadeb56491

Воспользовавшись инструментом box fill brush (B) в окне Tile Palette и выбрав слой Tilemap BaseLayer, нарисуйте прямую секцию мраморной стены. Нужно, чтобы она закрывала всё пока свободное пространство пола.

Можно заметить, что когда мы будем это делать, слой будет закрывать тайлы стен с колладерами, потому что пока не задан порядок слоёв. Это легко исправить, выбрав GameObject Collideable и изменив Order in Layer компонента Tilemap Renderer на более высокое значение (достаточно будет 5):

314631467ec638cad00a0082fae58113

Вернитесь в папку Prefabs проекта, откройте окно Tile и выберите палитру RoguelikeCave, а затем перетащите MarbleFloorRuleTile в пустое место на палитре:

de3c7b15b5b9e8531b15824c196d480d

Воспользуйтесь box fill brush и нарисуйте в комнате несколько секций мраморного пола:

0921201ff5eb1be81f34bfebff121079

Заметьте, что настроенный тайл правил, полностью окружённый со всех углов и граней, становится украшенным тайлом (спрайтом, выбранным в редакторе Tiling Rules).

Это ловушка!

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

Создайте в иерархии новый пустой GameObject и назовите его ShootingTrap. Создайте в ShootingTrap пустой дочерний GameObject. Назовите его Sprite:

66e75455eda0bbdb02033ebc5cff618f

Выберите Sprite и добавьте к нему компонент Sprite Renderer. Задайте Sorting Layer значение Player, а Order in Layer значение 1, чтобы он рендерился поверх остальных слоёв. Выберите поле Sprite, а в качестве спрайта поставьте roguelikeDungeon_transparent_180.

Теперь поверните Transform объекта Sprite на -90 по оси Z:

540666ded98bc99613b7dd5d6c7beeb7

Далее вернитесь к GameObject ShootingTrap и добавьте с помощью инспектора новый компонент. В поле поиска найдите Shooting Trap и прикрепите этот скрипт.

Этот скрипт добавлен в скачанные вами файлы проекта; по сути, он каждые две секунды запускает корутину, создающую экземпляр префаба вращающегося лезвия пилы (или любого другого префаба) в текущей позиции ловушки.

Задайте параметру Item to Shoot Prefab компонента Shooting Trap значение Projectile (префаб находится в /Assets/Prefabs):

a596146dc4ec7d91eb3f17e9976f5945

Снова запустите игру в редакторе и воспользуйтесь режимом Scene, чтобы найти ловушку. Она работает!

ef07715aed64732a12386defeec1b1cb

Перетащите копию ShootingTrap из иерархии в папку /Assets/Prefabs проекта, чтобы создать префаб. Удалите ShootingTrap из иерархии.

Мы используем ещё один скрипт тайловой кисти под названием PrefabBrush для создания кисти, способной рисовать префабы на слоях Tilemap.

Воспользуйтесь инспектором, чтобы задать параметру Prefabs Size PrefabBrush значение 1, а параметру Element 0 — значение ShootingTrap.

c8458e0df00c239708a275d5c17fd25b

Создайте в Grid новый слой Tilemap под названием Traps и откройте окно Tile Palette.

Выберите обычную тайловую кисть (B) и воспользуйтесь раскрывающимся меню в нижней части окна Tile Palette для выбора PrefabBrush. Выберите в качестве слоя Active Tilemap Traps и используйте окно Scene для отрисовки нескольких префабов ловушек вдоль левой границы комнаты.

ce1f3a3b6fbea97b23f8a388404772e8

Разверните в иерархии GameObject Traps и поэкспериментируйте со значением Shoot Start Delay для каждого value on each Gameobject ShootingTrap с помощью скрипта Shooting Trap в инспекторе. Добавляйте к значению каждой ловушки по 0.25, т.е.:

02b809ea5ea2b177b3da6d537a447794

Конечная цель

Цель этого мини-подземелья заключается в получении груды золота. Слава и богатство ждут тех, кто доберётся до неё, избежав смертельно опасных летающих лезвий.

Создайте в GameObject Grid новый слой Tilemap под названием Goal. Выберите Goal и измените значение Tilemap Renderer Order in Layer на 2:

ece7bff1f2eec46dab6974ec9293d8e8

Не закрывая окно Tile Palette, убедитесь, что всё ещё выбрана PrefabBrush. Сделайте так, чтобы Element 0 ссылался на заготовку Goal из папки /Assets/Prefabs проекта.

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

ee49701c003075b4bb2a048b6d2e8039

2c1736d0e9eb131101cef9c7ee08a18d

Последние штрихи

Сейчас подземелье слишком светлое и свободное. Мы можем добавить ему стиля, переключившись на материал 2D-спрайта, способный реагировать на свет.

Выберите Sprite объектов Player, Goal и ShootingTrap, и сделайте так, чтобы Material компонента Sprite Renderer использовал SpriteLightingMaterial:

9e87ce36a51b69b514f71cf71992f4b5

Это материал с прикреплённым к нему шейдером Sprite/Diffuse. Он позволяет освещению сцены воздействовать на спрайты.

В GameObject Grid выберите объекты BaseLayer, DungeonFloorDecoration, Collideable и Goal, а потом воспользуйтесь инспектором, чтобы тоже использовать в материале Tilemap Renderer Material SpriteLightingMaterial.

Затем выберите в GameObject Lights Directional light и снизьте значение Intensity Light до 0.3.

6fecb24ed773ea4b843e2ee32d3be164

Также вы сейчас заметите, что Player носит с собой Point light, то есть светящий вокруг него Lantern.

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

Перетащите две копии префаба FlickerLight из папки /Assets/Prefabs проекта в Scene и разместите их в GameObject Lights.

Задайте первому префабу позицию (X:-11.25, Y:4, Z:-1.35), а второму — (X:2.75, Y:4, Z:-1.35).

Создайте новый слой Tilemap под названием WallsAndObjects и задайте в инспекторе Tilemap Renderer Order in Layer значение 15. Не забудьте, чтобы Material тоже использовал материал SpriteLightingMaterial.

Переключите кисть палитры тайлов обратно на Default Brush, а Active Tilemap на WallsAndObjects.

Воспользуйтесь инструментом brush (B) для отрисовки двух тайлов «света фонарей» под каждым из новых FlickerLight, которые мы разместили по углам начальной области:

6a82aeb824326ec78184559b0986ef78

Время трудностей

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

Вернитесь обратно в слой Tilemap DungeonFloorDecoration и добавьте ещё немного деталей на мраморный пол, например, трещины на нескольких тайлах:

6115d7f2a96969a47b9c262dd215623b

Поздравляю, вы завершили свой первый мини-уровень подземелья! В результате у вас должно получиться нечто подобное:

f1b1900633e1a0fdad59453a238c5a17

Куда двигаться дальше?

Если вы пропустили какой-то шаг, то можете посмотреть на готовый результат этого туториала, открыв проект Unity Rayzor-final из скачиваемых материалов.

В этом туториале мы научились многому, но как и в любом другом деле, всегда есть что-то ещё!

Существуют интересные скрипты тайловых кистей, не рассмотренные в этом туториале. Прочитайте о них здесь и подумайте, сможете ли вы воспользоваться ими.

Также можете изучить создание анимированных тайлов здесь.

Источник