Урок 2. Движение объекта с помощью Rigidbody.
Добрый день. В этой статье мы рассмотрим движение объектов (персонажа) с помощью физического воздействия на него. В unity за физику отвечает компонент RigidBody. В первом уроке мы научились создавать объекты, а так же прикрепили к нашему объекту компоненты Collider и Rigidbody. Если Вы не умеете этого делать советую для начала изучить первый урок. Для начала увеличим нашу поверхность до размеров 5х5, а так же добавим стены(я для этого использовал объекты Cube) и расположим их по краям нашей поверхности (Скриншот №1)
Теперь перейдем к написанию кода. Создайте скрипт и назовите его MoveRigidbody. Для начала создадим переменные движения, скорости (не забудьте в инспекторе выставить значение скорости или можно здесь установить moveSpeed = 10;) и вектора. Так как мы будем рассматривать движение без поворотов объекта, то определим переменную с помощью функции get и в ней определим функции перемещения (Скриншот №2).
Дальше в методе старт подключим компонент Rigidbody к переменой rb. и изменим метод Update() на FixedUpdate(), а так же создадим еще один метод и назовем его Move() и впишем его выполнение в наш FixedUpdate(). (Скриншот №3)
Теперь в нашем методе движения создадим наш алгоритм движения, в котором мы создадим силу взаимодействия на твердое тело и укажем как мы будем взаимодействовать на него, а так же укажем скорость и добавим управление, которое мы определили ранее(Скриншот №4).
Здесь мы придали силу с помощью Force, но есть еще другие способы, которые описаны ниже в таблице:
Наименование | Описание. |
---|---|
Slote Limit | Создаёт непрерывное усилие к жесткому телу, используя его массу. |
Step Offset | Создаёт непрерывное ускорение жесткому телу, игнорируя его массу. |
Skin Width | Создаёт мгновенный импульс силы к жесткому телу, используя его массу. |
Min Move Distance | Создаёт мгновенное изменение скорости к жесткому телу, игнорируя его массу. |
Center | Создаёт мгновенное изменение скорости к жесткому телу, игнорируя его массу. |
Radius | Создаёт мгновенное изменение скорости к жесткому телу, игнорируя его массу. |
Height | Создаёт мгновенное изменение скорости к жесткому телу, игнорируя его массу. |
Попробуйте все варианты и выберите тот, который Вам больше подойдет.
Теперь давайте научим нашего персонажа прыгать. Для этого создадим еще 2 переменных float jump и bool isGround, ещё создадим два метода Jump() и OnCollisionEnter, а так же в редакторе Unity создадим тэг “Ground” и присвоим его нашей земле(Скриншот №5). Ещё нужно будет создать физический материал для того, чтобы персонаж не застревал в стенах при прыжке и нажатых кнопках управления
Ещё нужно будет создать физический материал нажав на вкладке Project правой кнопкой мыши и выбрать Create/Physic Material. Он нужен для того, чтобы персонаж не застревал в стенах при прыжке когда нажаты кнопки управления и вставить его в наш коллайдер. (Скриншот №6)
Теперь настройте физический материал как указанно на Скриншоте № 7
Теперь создадим алгоритм в методе Jump() и OnCollisionEnter(). В первом алгоритм будет схож с алгоритмом метода Move, так же добавим условие выполнения условий прыжка. Во втором просто пропишем условие при соприкосновении коллайдеров. Ниже весь код, который должен у вас получиться с подробным описанием.
Если Вы хотите, чтобы Вашим персонажем нельзя было управлять в полете добавьте условие в FixedUpdate как на скриншоте №9