Основная проблема с коллизиями в последней главе была связана с кодом. Теперь мы изменим значения позиции GameObject напрямую . Мы просто добавляем значение в позицию, если игрок нажимает клавишу. Нам нужен способ заставить игрока двигаться так, чтобы он правильно реагировал на границы и другие объекты GameObject.
Для этого нам необходимо понять, что такое твердые тела . Твердые тела — это компоненты, которые позволяют GameObject реагировать на физику в реальном времени . Это включает в себя реакции на силы и гравитацию, массу, сопротивление и импульс.
Вы можете прикрепить Rigidbody к своему GameObject, просто нажав Add Component и введя Rigidbody2D в поле поиска.
Нажав на Rigidbody2D, вы прикрепите компонент к вашему GameObject. Теперь, когда он прикреплен, вы заметите, что открылось много новых полей.
При настройках по умолчанию GameObject будет падать вертикально вниз под действием силы тяжести. Чтобы избежать этого, установите Gravity Scale на 0.
Теперь, игра в игру не будет показывать никакой видимой разницы, потому что GameObject пока не имеет ничего общего с его физическим компонентом.
Чтобы решить нашу проблему, давайте снова откроем наш код и перепишем его.
public class Movement : MonoBehaviour { public float speed; public Rigidbody2D body; // Update is called once per frame void Update() { float h = Input.GetAxisRaw(“Horizontal”); float v = Input.GetAxisRaw(“Vertical”); body.velocity = new Vector2(h * speed, v * speed); } }
Мы можем видеть, что мы создаем ссылку на Rigidbody2D в объявлениях, и наш код обновления работает с этой ссылкой вместо преобразования объекта. Это означает, что Rigidbody получил ответственность за перемещение.
Вы можете ожидать, что ссылка на тело выдаст исключение NullReferenceException, поскольку мы ничего ему не присвоили. Если вы скомпилируете и запустите игру как есть, в левой нижней части редактора появится следующая ошибка
Чтобы это исправить, давайте рассмотрим компонент, созданный скриптом. Помните, что общедоступные свойства создают свои собственные поля в Unity, как мы это делали с переменной speed.
Установите более высокое значение скорости, около 5, и играйте в игру.
Ваши столкновения теперь будут работать правильно!