Приветствую! В данной статье мы разберём правильную реализацию движения персонажа. Поскольку движение 2D и 3D персонажей почти на 100% эдентичны, то мы поочереди их и разберём. Благодаря чему, начинающий разработчик не только разберётся в том, как реализовать функцию передвижения, но увидит разницу между движениями 2D и 3D.
Начнём свой пусть с 2D передвижения, поскольку он чуток легче в понимании.
Передвижение 2D персонажа
Первым делом создадим игровой объект нашего персонажа, и назовём его, например, Player.
Далее добавим к нашему персонажу компонент Rigidbody 2D. Если в Вашей игре отсутствуют законы гравитации, то в в поле Body Type необходимо указать значение "Kinematic".
P.S. Обычно гравитация отсутствует в 2д играх с видом сверху.
Теперь самое интересное, нам необходимо создать C# скрипт с названием, например movePlayer, и присвоить этот скрипт нашему объекту Player. А сам скрипт должен иметь следующее содержимое:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class movePlayer : MonoBehaviour
{
private Rigidbody2D rb;
public float speed = 0.5f;
private Vector2 moveVector;
void Awake()
{
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
moveVector.x = Input.GetAxis("Horizontal");
moveVector.y = Input.GetAxis("Vertical");
rb.MovePosition(rb.position + moveVector * speed * Time.deltaTime);
}
}
Готово! Давайте разберём наш код. В строках 7,8,9 мы создали 3 переменные:
- rb - которая будет хранить ссылку на компонент Rigidbody2D
- speed - скорость передвижения вашего персонажа
- moveVector - направление движения персонажа в виде вектора
Далее в 13 строке мы в переменную rb присваивает ссылку на наш компонент Rigidbody2D, чтобы в дальнейшем можно было бы работать с его свойствами и методами.
В строке 18 в переменную moveVector.x мы записываем значение движения по горизонтали. Если максимально простыми словами, то при нажатии на клавишу "D", в переменной записывается значение "1" - вперёд. При нажатии на клавишу "A" - в переменную записывается "-1" - назад.
Аналогичная ситуация происходит и в 19 строке. При нажатии на клавишу "W", в переменной записывается значение "1" - вверх. При нажатии на клавишу "S" - в переменную записывается "-1" - вниз.
Ну и в 20 строке, с помощью метода MovePosition, мы заставляем двигаться нашего персонажа, исходя из значений которые мы получили в moveVector.
Теперь Ваш персонаж может спокойно передвигаться в мировом пространстве. Как видите, всё очень просто и понятно. Теперь как и обещал, перейдём к 3D.
Передвижение 3D персонажа
Для начала, создадим игровой объект персонажа с названием, например, Player. А так же создадим объект Земли, по которой персонаж будет передвигаться. И назовём его, например, Ground.
Так же добавляем к персонажу компонент Rigidbody - чтобы на него действовала гравитация(если нужно).
Теперь так же необходимо создать C# скрипт с названием, например movePlayer, и присваиваем этот скрипт нашему объекту Player. А сам скрипт должен иметь следующее содержимое:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class movePlayer : MonoBehaviour
{
private Rigidbody rb;
public float speed = 0.5f;
private Vector3 moveVector;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
moveVector.x = Input.GetAxis("Horizontal");
moveVector.z = Input.GetAxis("Vertical");
rb.MovePosition(rb.position + moveVector * speed * Time.deltaTime);
}
}
Как видите, данный код почти на 100% аналогичен. Давайте посмотрим, что мы тут изменили.
- В 7 и 13 строке мы измении тип компонента с Rigidbody2d на Rigidbody, ведь мы уже имеем дело не с 2д, а с 3д.
- В 9 строке тип переменной moveVector изменён с Vector2 на Vector3, так как у игр 3D, три мировые оси а не две.
- В 19 строке мы изменили moveVector.y на moveVector.z, поскольку в 3D играх, ось по Y отвечает за верх. А вверх идти нельзя. Вверх можно передвигаться только с помощью прыжка, который мы реализуем в следующей статье.
На этом всё. Надеюсь данная статья научила Вас реализации передвижения персонажа, а так же показала в чём принципиальная разница передвижений между 2D и 3D играми.
Если Вам данная статья помогла, буду рад Вашим лайкам. Спасибо :)
Спасибо большое тебе