Как визуализировать слои параллакса в редакторе уровней?

9

Я делаю 2D-игру в Unity, но это применимо к любому движку 2D-игр.

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

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

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

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

TenFour04
источник
4
Когда я делал такую ​​игру, я просто сделал так, чтобы вы могли перемещаться по камере в редакторе и видеть, как работает параллакс. Однако я не уверен, как конкретно сделать что-то подобное в Unity.
Тетрад

Ответы:

1

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

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

Attackfarm
источник
Да, кажется, использование редактора уровней - лучший способ сделать это, будь то кодирование самостоятельно или, в моем случае, с Unity, настройка его для работы с существующим редактором. Я закодировал свою настройку паралакса с отдельным объектом камеры для каждого слоя, и каждая камера перемещалась соответствующим образом относительно основной камеры в каждом кадре. Затем используйте [ExecuteInEditMode], чтобы заставить их обновляться, даже когда основная камера перетаскивается в редакторе. Мне просто нужно помнить, чтобы перемещать только основную камеру напрямую.
TenFour04
1

Идея: я думаю, что камеры для переднего слоя достаточно. Размещение спрайтов на расстоянии от этого на плоскости z, а изменение расстояния дает вам долю, на которую можно переместить этот задний слой.

Например, расстояние до объекта 10 от фронтальной камеры перемещается на 1/10 в фоновом слое. Объект с расстоянием 2 будет двигаться на 1/2 в соответствующем слое и т. Д.

Джейсон Кумбс
источник