Warning: Undefined array key "is_rate_editable" in /var/www/webmasr5/public_html/wp-content/plugins/wpdiscuz/class.WpdiscuzCore.php on line 1303
Движение объекта с помощью Rigidbody

webmas

Урок 2. Движение объекта с помощью Rigidbody.

     Добрый день. В этой статье мы рассмотрим движение объектов (персонажа) с помощью физического воздействия на него. В unity за физику отвечает компонент RigidBody.  В первом уроке мы научились создавать объекты, а так же прикрепили к нашему объекту компоненты Collider и Rigidbody. Если Вы не умеете этого делать советую для начала изучить первый урок. Для начала увеличим нашу поверхность до размеров 5х5, а так же  добавим стены(я для этого использовал объекты Cube) и расположим их по краям нашей поверхности (Скриншот №1)

Скриншот №1

     Теперь перейдем к написанию кода. Создайте скрипт и назовите его MoveRigidbody. Для начала создадим переменные движения, скорости (не забудьте в инспекторе выставить значение скорости или можно здесь установить moveSpeed = 10;)  и вектора. Так как мы будем рассматривать движение без поворотов объекта, то определим переменную с помощью функции get и в ней определим функции перемещения (Скриншот №2).

Скриншот №2

     Дальше в методе старт подключим компонент Rigidbody к переменой rb. и изменим метод Update() на FixedUpdate(), а так же создадим еще один метод и назовем его Move() и впишем его выполнение в наш FixedUpdate(). (Скриншот №3)

Скриншот №3

     Теперь в нашем методе движения создадим наш алгоритм движения, в котором мы создадим силу взаимодействия на твердое тело и укажем как мы будем взаимодействовать на него, а так же укажем скорость и добавим управление, которое мы определили ранее(Скриншот №4).

Скриншот №4

     Здесь мы придали силу с помощью Force, но есть еще другие способы, которые описаны ниже в таблице:

Наименование Описание.
Slote Limit Создаёт непрерывное усилие к жесткому телу, используя его массу.
Step Offset Создаёт непрерывное ускорение жесткому телу, игнорируя его массу.
Skin Width Создаёт мгновенный импульс силы к жесткому телу, используя его массу.
Min Move Distance Создаёт мгновенное изменение скорости к жесткому телу, игнорируя его массу.
Center Создаёт мгновенное изменение скорости к жесткому телу, игнорируя его массу.
Radius Создаёт мгновенное изменение скорости к жесткому телу, игнорируя его массу.
Height Создаёт мгновенное изменение скорости к жесткому телу, игнорируя его массу.

      Попробуйте все варианты и выберите тот, который Вам больше подойдет.

     Теперь давайте научим нашего персонажа прыгать. Для этого создадим еще 2  переменных float  jump и bool isGround, ещё создадим два метода Jump() и OnCollisionEnter, а так же в редакторе Unity создадим тэг “Ground” и присвоим его нашей земле(Скриншот №5). Ещё нужно будет создать физический материал для того, чтобы персонаж не застревал в стенах при прыжке и нажатых кнопках управления

Скриншот №5

      Ещё нужно будет создать физический материал нажав на вкладке Project правой кнопкой мыши и выбрать Create/Physic Material. Он нужен для того, чтобы персонаж не застревал в стенах при прыжке когда нажаты кнопки управления и вставить его в наш коллайдер. (Скриншот №6)

Скриншот №6

      Теперь настройте физический материал как указанно на Скриншоте № 7

Скриншот №7

      Теперь создадим алгоритм в методе Jump() и OnCollisionEnter(). В первом алгоритм будет схож с алгоритмом метода Move, так же добавим условие выполнения условий прыжка. Во втором просто пропишем условие при соприкосновении коллайдеров. Ниже весь код, который должен у вас получиться с подробным описанием. 

Скриншот №8

      Если Вы хотите, чтобы Вашим персонажем нельзя было управлять в полете добавьте условие в FixedUpdate как на скриншоте №9 

Скриншот №9
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии