Unity 2D: Добавить физику к картинке персонажа

Немного о том как добавить стандартную физику для 2D персонажа в Unity.

Давайте соберем простую сценку для демонстрации того, как в Unity можно добавить физические свойства объектам. Допустим мы хотим сделать площадку по которой бегает наш герой влево или в право.

Первым делом добавим на нашу сцену 2D объект квадрат и растянем его в прямоугольник. Для это в дереве иерархии нажимаем правой кнопкой мыши -> 2D Objects -> Sprites -> Square . Далее растягиваем только что созданный объект мышкой в прямоугольник.

Далее нажимаем на наш прямоугольник и в окне свойств нажимаем кнопку «Add Component» -> Physics 2D -> Box Collider 2D. Данный компонент заставляет взаимодействовать наш прямоугольник с внешним миром.

Теперь давайте добавим на нашу сценку персонажа. Это может быть PNG картинка, я же добавлю стандартный элемент «Круг». В дереве иерархии нажимаем правой кнопкой мыши -> 2D Objects -> Sprites -> Circle . Теперь нужно добавить нашему персонажу два компонента. Первый так же будет заставлять его реагировать на окружающий мир. Для этого по аналогии с нашей платформой добавляем нашему кругу Circle Collider 2D. Вторым шагом заставим гравитацию действовать на наш объект. Для этого еще раз выделяем элемент нашего персонажа и нажимаем кнопку «Add Component» -> Physics 2D -> Rigidbody 2D.

Если сейчас запустить наш проект, то мы увидим как наш персонаж падает на платформу. Теперь давайте рассмотрим самый примитивный вариант того, как мы можем заставить бегать наш персонаж влево или право. Для этого нам необходимо создать скрипт. Для этого в нижнем меню нажимаем правой кнопкой мыши на Assets -> Create -> MonoBehaviour Script

В ассетах проекта появится новый элемент скрипта. Можно нажать на него дважды, что бы открылся ваш стандартный редактор кода.

Важно: Дальше нужно понять один момент. Писать скрипты можно по разному. Можно создать один скрипт который будет работать с элементами сцены, получая их по тегу или имени. Можно же писать скрипты, которые будут работать с объектом, на который данный скрипт будет повешен (мы пойдем этим путем). Второй подход позволяет вам создать свой базовый набор логики, который вы будете применять к другим объектам в разных проектах.

В редакторе кода пишем вот такой код и сохраняемся:

using UnityEngine;

public class NewMonoBehaviourScript : MonoBehaviour
{
    void Start()
    {
        
    }

    void Update()
    {
        if(UnityEngine.InputSystem.Keyboard.current.leftArrowKey.isPressed 
            || UnityEngine.InputSystem.Keyboard.current.rightArrowKey.isPressed)
        {
            Debug.Log("Move it!");
            float step = (UnityEngine.InputSystem.Keyboard.current.leftArrowKey.isPressed ? -1 : 1) * 0.01f;
            transform.position = new Vector3(transform.position.x + step, transform.position.y);
        }
    }
}

Важно: в интернете много примеров кода, который говорит о том что получить нажатие клавишу можно через метод System.IO.Input.GetKeyDown, однако данный подход является устаревшим и не рабочим (без доп настройки проекта)! На данный момент необходимо работать с классами Keyboard и Mouse.

Как можно заметить, в коде нет явного получения никаких объектов. Наборот, он написан так, как будто this (на самом деле this.gameObject) это и есть наш персонаж и мы просто работаем с его свойством transform.

Теперь остается последний шаг. Возвращается в Unity. В нижнем меню находим наш скрипт и переносим его мышкой на нашего персонажа в иерархии объектов.

Запускаем наш проект и пробуем двигать нашего героя стрелками влево или право. Можно сохранить этот скрипт и применять его к любым другим объектам на сцене — они так же будут перемещаться при нажатии на стрелочки клавиатуры.

Запись опубликована в рубрике Unity с метками , , , . Добавьте в закладки постоянную ссылку.