Создание и передвижение 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.