Создание и передвижение 2D персонажа в Unity по клику мыши
В этом уроке я расскажу про то, как создать персонажа в Unity и реализовать его передвижение по клику мыши в 2D пространстве. Для начала создадим персонажа в игровом пространстве, для этого необходимо перенести спрайт этого персонажа из файлов проекта на карту
Добавим в нашего созданного персонажа 2 новых компонента BoxCollider2D (или любой другой коллайдер) и RigidBody2D (для физики). В RigidBody2D, в значение GravityScale необходимо поставить 0 и тогда персонаж не будет падать вниз. Если вы не хотите, чтоб ваш персонаж задевал другие коллайдеры, то можете просто убрать ему RigidBody или поставить ему параметр BodyType в значение Cinematic
Теперь создадим скрипт, который будет управлять нашим 2D персонажем, назовем его PlayerController и навесим его на наш спрайт.
Так как нам необходимо сделать передвижение по клику мыши, мы сделаем считывание текущего положения мыши в методе Update().
public class PlayerController : MonoBehaviour {
Rigidbody2D rigidBody2d;
private void Start()
{
rigidBody2d = GetComponent();
//Компоненты желательно занести в локальные переменные,
//чтоб не нагружать память при их постоянном поиске
}
bool NeedToGo=false;
public float Speed=0.05f;
Vector2 worldPos;
void Update () {
//Считываем левый клик мыши, когда кнопка была отжата
if (Input.GetMouseButtonUp(0)==true)
{
Vector2 mousePos = Input.mousePosition;
//В mousePos находится экранное положение мыши
//(относительно разрешения экрана)
worldPos = Camera.main.ScreenToWorldPoint(mousePos);
//В worldPos мы перевели положение
//мыши относительно нашей главной камеры
//worldPos - та точка, которая нам и нужна
NeedToGo = true;
}
//если значение выставленно, то наш объект должен двигаться в нужную сторону
if (NeedToGo)
{
rigidBody2d.MovePosition(Vector2.MoveTowards(transform.position,worldPos,Speed*Time.deltaTime));
//Плавное перемещение до точки
//Умножаем на Time.timeScale для того,
//чтоб было плавнее и картинка не дергалась
//Теперь проверяем расстояние до цели
if (Vector2.Distance(transform.position, worldPos) < 0.01)
{
NeedToGo = false;//Выключаем, если дошли
}
}
}
}
Теперь при запуске игры наш персонаж будет передвигаться по клику мыши в заданную точку на Unity.


(8 оценок, среднее: 4,00 из 5)