Добрый день!
Сегодня мы разберём как некоторое способы по созданию стрельбы в игровом движке Unity. Разбирать весь функционал мы будем на нашем готовом примере который мы делали на заказ. Видео примеры результата ищите на нашем канале и в нашей группе в Телеграмме.
Способ первый
Всем же знакома игра CS:GO | CS2 думаем многим. Так вот, данный тип игр использует довольно интересный способ стрельбы по прицыпу RayCast. То есть из оружия или из определённой точки выпускается луч который вызывает функцию стрельбы и нанесения урона. Данный способ очень оптимизированный так как не требует лишних вычислений/спавна патрона/трейла пули и так далее. Но как и плюсы у него есть вои минусы. Самым большим является его калибровка и данный способ будет напрямую зависеть от FPS, чем выше тем лучше, чем ниже тем хуже, а самая большая проблема это синхронизация с анимацией. И сейчас мы вам продемонстрируем наше решение в рабочем проекте!
Для начала уточним что нам нужно будет использовать ООП для грамотной оптимизации кода. Более подробно про ООП вы сможете прочитать на нашем канале.
И так, для реализации данной системы нам понадобится входные данные урона, эффекты попадания и выстрела, задержка(если таковая требуется)! И так В данном примере код будет максимально простым, вы это сможете даже понять если пролистнете чуть ниже и сравните алгоритмы.
На этом всё, далее просто вызываем эту функцию которая отвечает за задержку и стрельбу, главное не забудьте прописать условия вызова для данной функции! В нашем случае вызовом для данной функции является нажатие по UI кнопке, так как проект разрабатывался под мобильные устройства.
Способ второй
Способ второй заключается в создании стрельбы через физические пули! Его мы использовали в своём игровом проекте для заказчика, как как нужно было визуализировать патроны. Для данного способа мы создали отдельный скрипт для оружия в котором прописали все входящие параметры.
Просим вас заметить что мы тут не прописывали урон, а всё по тому что скрипт урона будет напрямую висеть на пуле во избежания лишних расчётов!
Далее мы обязательно создали отдельную функцию для стрельбы, обязательно нужно чтобы она была публичной! Данная функция вызывает спавн патрона или нескольких патронов, отвечает за разброс и скорость вылета снаряда.
Но как же вызвать данную функцию? Ответ простой и заключается в действии, точнее в том какой тип игры вы используете, ведь для Мобильных устройств и для ПК каждый метод вылета пули будет разный. В данном примере мы использовали функции для мобильных устройств!
И так, сразу хотим сказать что для дробовиков и для скорострельных оружий функционал будет разный! Давайте разберём скорострельный пример, так как его подключение будет труднее!
Для начала нам нужно создать 2 вспомогательные функции и 1 корутину, так же назначить одну логическую переменную:
Как вы уже поняли то функция FireGun() это функция которая отвечает за сам расчёт патрона/патронов.
Далее переходим к подключению управления выстрелом! В иерархии канаса создадим простое изображение которое будет отвечать за выстрел. На него накидываем компонент Event Trigger и настраиваем его как на рисунке:
В shootDelay мы настраиваем задержку для каждого выстрела. Если вы сделали всё правильно то по итогу у нас получится отличное скорострельное оружие! Но давайте разберём скрипт пули! Для начала нам нужен показатель урона, затем эффекты для попадания в различные коллайдеры, в нашем случаи их всего два:
Основную логику пропишем через OnCollisionEnter, но сперва подготовим функцию для создании эффекта в точках соприкосновений с коллайдером:
А теперь уже пропишем основную логику патрона!
Всё у нас теперь есть 2 полностью настроенных оружия, с помощью двух самых популярных способов. По этому на этом наши урок подходит к концу! Напоминаем что все материалы, в том числе и видео примеры мы разместим на нашем канале и в канале Телеграмм.