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

webmas

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

Добрый день! 

Сегодня я хочу рассказать, как можно сделать движение объекта или персонажа в Unity.

Начнем с того, что нужно открыть Ваш объект и создать в нём 3д объект Capsule.

Для этого нужно в верхнем меню unity нажать GameObject/3D Object/Capsule, либо в левой части во вкладке Hierarchy нажать правую кнопки мыши и проделать те же действия, ранее (Скриншот №1), таким же способом создадим объект Plane (он находится в той же вкладке, что и Capsule).

Скриншот №1

В объекте Capsule уже прикреплен коллайдер, но если нам нужно, чтобы наш объект имел физические свойства и мог сталкиваться с объектами к нему нужно прикрепить еще компонент Rigidbody. Для этого выберите наш объект и во вкладке Inspector нажмите кнопку Add component. В появившемся меню выберите Physics и в открывшейся вкладке выберите компонент Rigidbody, либо в поисковой строке начните вводить Rigidbody и у вас он появится сразу в результате поиска (Скриншот №2). так же заблокируйте вращения в нём по X, Y и Z (Constrains/ Freeze Rotation)

Скриншот №2

После создания объекта создадим скрипт и назовем его Move (все скрипты нужно называть с большой буквы). Для этого в окне Project нажмите на правую кнопку и выберите Create/ C# script (Скриншот №3)., так же создайте material для Plane. Выбрав цвет в панели Inspector(у меня зеленый) перетащите материал на объект Plane(это нужно, чтобы было видно движение объекта). Создав скрипт откройте его в своем редакторе(у меня это Visual Studio).

Скриншот №3

Начнем с того, что создадим переменную скорости и назовем ее speedMove. Сделаем ее приватной, так как мы не будем её использовать в других скриптах, присвоим значение float(число с плавающей точкой), а так же добавим к переменной [SerializeField], таким образом мы сможем изменять значение в инспекторе юнити.

[SerializeField] private float speedMove;

Модификатор доступа private можно не писать, так как он ставится по умолчанию. 

Теперь создадим метод для движения объекта. Есть 3 способа:

1.  Update – вызывается каждый кадр и создается автоматически при создании скрипта.

2. FixedUpdate – вызывается через определенный промежуток времени (по умолчанию каждые 0.02 секунды или 50 раз в секунду) и не зависит от частоты обновления кадров (FPS), подходит для вычисления физики игры.

3. Coroutines – их рассмотрим в другой статье.

Мы воспользуемся вторым методом.

Создадим метод:

void FixedUpdate()

    {

        transform.position += new Vector3(0, 0, speedMove * Time.deltaTime);

    }

Сохраним его и перейдем в Unity. В инспекторе выставим значение скорости (speedMove) на 1. Запустив игру мы уже сможем видеть что наш объект двигается. Здесь мы с помощью переопределения положения с помощью Vector3 переопределяем позицию по оси Z умножая нашу скорость перемещения на Time.deltaTime(необходимо для плавности перемещения, без этого нужно будет выставлять очень маленькие значения скорости, например 0.02f). Теперь сделаем так, чтобы наш объект двигался по нажатию кнопок на клавиатуре. Воспользуемся набором кнопок в unity “Horizontal” и “Vertical”. Первый позволяет управлять с помощью кнопок стрелки вправо и влево и буквы A и D, а второй стрелки вверх и вниз и буквы W и S. Для удобства назначим 2 переменные x и y.

 

void FixedUpdate()
{
float x = Input.GetAxis(“Horizontal”);
float z = Input.GetAxis(“Vertical”);
transform.position += new Vector3(x, 0, z) * speedMove * Time.deltaTime;
}

Запустите игру и попробуйте поуправлять. Есть другой способ перемещения персонажа вправо и влево с помощью поворота, но нужно немного изменить код. Так как объект мы будем вращать по оси Y переименуйте переменную X на Y, дальше мы будем перемещать с помощью функции transform.Translate? а вращать с помощью Rotate.

 

void FixedUpdate()
{
float y = Input.GetAxis(“Horizontal”);
float x = Input.GetAxis(“Vertical”);
transform.Translate(Vector3.forward * speedMove * Time.deltaTime * x);
transform.Rotate(Vector3.up, y);

}

Все возможные варианты:

Vector3.forward // (0, 0, 1)
Vector3.back // (0, 0, -1)
Vector3.up // (0, 1, 0)
Vector3.down // (0, -1, 0)
Vector3.right // (1, 0, 0)
Vector3.left // (-1, 0, 0)

В скобках очередность координат (X, Y, Z). Векторы 1 и 2, 3 и 4, 5 и 6 взаимозаменяемые, достаточно перед Vector3 поставить -.

В следующем уроке мы рассмотрим методы движения с помощью физического воздействия на объект с помощью Rigidbody.

Видеоматериал по статье:

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