Alex924

Alex924

Пикабушник
661 рейтинг 4 подписчика 17 подписок 7 постов 1 в горячем
Награды:
10 лет на Пикабу За исследование параллельных миров
220

Unity3D. Простой способ направить силу относительно объекта

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


Для начала создадим новый 2D проект (также скажу, что данный способ будет работать и в 3D проекте) создадим несколько папок: Prefabs, Scripts и Resources

Теперь нам нужны 2 объекта которыми мы будем манипулировать. Для примера я возьму вот такие картинки винтовки и пули к ней, поместим их в папку Resources, создадим из них префабы и поместим в папку Prefabs

Далее нам необходимо создать точку, где будет спавниться наш снаряд, для этого на вкладке Hierarchy выберем Create -> Create Empty и сделаем его дочерним, перетянув мышкой на наш Gun. Для удобства переименуем его в Spawn Point

Теперь нам нужно выставить позицию Spawn Point, выберем его в иерархии и подвигаем стрелками на сцене так, чтобы он был примерно у конца ствола. Так как объект является дочерним, он будет привязан к стволу винтовки как бы мы её не повернули

Сохраним все изменения префаба, нажав кнопку Apply в окне Inspector

Теперь, собственно, приступим к написанию кода. Откроем папку Scripts, нажмём правой кнопкой мыши и выберем Create -> C# Script, назовём его GunController. Он будет заниматься генерированием наших пуль

Откроем его двойным кликом

Для управления нашим снарядом нам понадобится ссылка на объект, создадим публичную переменную типа GameObject, назовём её bullet. Можно сразу создать переменную отвечающую за мощность силы, которую мы применим к нашей пуле.

Также, кроме ссылки на пулю, нам понадобится ссылка на объект, в месте которого она будет спавниться, назовём её spawnPoint. Выглядеть это будет примерно так

Теперь создадим отдельный метод, который будет заниматься генерированием и позиционированием нашего снаряда

Метод почти готов, теперь нам нужно сделать так, чтобы на нашу пулю действовала физика, для этого выберем наш префаб и, нажав на кнопку Add Component в инспекторе, в поиск введём Rigidbody и выберем появившийся в списке Rigidbody2D

Теперь немного дополним наш метод, применим силу к нашему объекту через компонент физики, в конец метода добавим такой код

Написанный нами метод нужно как-то вызывать, для этого в созданном автоматически методе Update напишем код, который будет вызывать наш метод при каждом нажатии на левую кнопку мыши. ОБЯЗАТЕЛЬНО сохраняем наш скрипт, нажав Ctrl + S

Теперь чтобы скрипт заработал, нам необходимо прикрепить его к нашему оружию. Для этого выберем префаб Gun, нажмем Add Component и в поиске введём название нашего скрипта и добавим его

Мы видим 3 поля: 2 ссылки на объекты и скорость полёта которые мы создавали в скрипте, заполним их, перетащив компоненты из иерархии в поле

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


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


Надеюсь вам помогла эта статься, если возникли какие-то вопросы или сложности, задавайте в комментариях, постараюсь всем помочь)

Показать полностью 11
Отличная работа, все прочитано!