Создание и передвижение 2D персонажа в Unity по клику мыши

В этом уроке я расскажу про то, как создать персонажа в Unity и реализовать его передвижение по клику мыши в 2D пространстве. Для начала создадим персонажа в игровом пространстве, для этого необходимо перенести спрайт этого персонажа из файлов проекта на карту

Создание 2D персонажа в Unity

Добавим в нашего созданного персонажа 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.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (7 оценок, среднее: 4,29 из 5)
Adblock
detector