2D порталы в платформере

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


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

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

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

Теперь надо сделать пулю или снаряд, который будет вылетать из портальной пушки, класс Portal2DBullet.

2D порталы в платформере

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

Следующий шаг, префаб порталов:


Как видим на скриншоте, иерархия объекта состоит из - маски, двух спрайтов портала, двух коллайдеров и одного триггера.

Разберем по порядку, дочерние объекты:

Маска портала Mask:


Здесь у нас только Sprite Masks, у которого в качестве спрайта, нужно указать спрайт размером 100х100 пикселей. Должен быть именно такой размер изображения (обычный квадрат) чтобы правильно рассчитывать размеры маски.

Следующие объекты это спрайты портала portal_template_1 и portal_template_2, нечего особенного в них нет, но нужно правильно настроить Sprite Renderer обоих картинок, в одном случаи параметр Mask Interaction ставим на Visable Iside Mask, у второго изображения на Visable Outside Mask. Таким образом будет создаваться иллюзия вхождения в портал. (при этом на всех (!) спрайтах игрока, нужно ставить Visable Outside Mask)

Итак, следующим идут коллайдеры Collider-1 и Collider-1, они будут воссоздавать поверхность вокруг портала.

Последний объект Lock это тоже обычный 2D коллайдер как и другие, он сам будет переходить в режим триггера и обратно, тем самым выступая своего рода замком, когда игроку можно пройти через портал, а когда нельзя.

Рассмотрим родительский объект Portal2D_Primary, со скриптом Portal2D:


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

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

Далее, скрипт портальной пушки Portal2DWeapon.
Это своего рода менеджер порталов, скрипт можно повесить на персонажа.

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

Скачать демо проект:
https://www.patreon.com/posts/2d-portaly-v-23168498
Тестировалось на: Unity 2017.3.1

Комментариев 2

Офлайн
Atanashi 14 апреля 2018
Здравствуйте. Можете написать скрипт в котором будет возможность реализовать добавление в canvas 3d модели, так что бы озвещение реагировало на модель добавленое в canvas?
Офлайн
TeDj 11 апреля 2018
Классно! Считай, готовая игра!
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика