Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Все Гайды Мой Кабинет

Как передвинуть 2D объект в место клика мыши

Приветствую начинающих разработчиков. В данной статье мы научимся передвигать объект в то место игрового пространства, в которое пользователь кликнул левой кнопкой мыши. Данная реализация для 2D и 3D существенно отличаются, поэтому для игр 3D была написана отдельная статья под названием «Передвижение персонажа по клику мыши в Unity 3D». Но а мы не будем тянуть, и попробуем реализовать данный функционал для 2D игры.

Первым делом создадим с помощью окна Hierarchy новый игровой объект, назовём его Player, этот объект будет являться нашим персонажем. (2D Object - Sprites - Square).

Далее создадим скрипт c#, с названием Move, и заранее присвойте его к только что созданному объекту Player. Впишите в скрипт следующий код:

using UnityEngine;

public class Move : MonoBehaviour
{
    private bool isMoving = false;
    private Vector3 targetPosition;
    public float speed = 1f;

    private void Update()
    {
        if (Input.GetMouseButton(0))
        {
            targetPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            isMoving = true;
        }

        if (isMoving)
        {
            transform.position = Vector2.MoveTowards(transform.position, targetPosition, Time.fixedDeltaTime * speed);
            if (transform.position == targetPosition)
            {
                isMoving = false;
            }
        }
    }
}

Предлагаю вкратце разобрать этот код, сначала мы объявляем переменные:

  • В строке #5 мы создали переменную isMoving, которая будет хранить информацию о том, нужно ли перемещать нашего персонажа или нет. True - нужно, false - не нужно.
  • В строке #6 переменная targetPosition будет хранить координаты того места пространства, на которое мы кликнули, чтобы потом в это место двигать нашего персонажа..
  • В встроке #7 переменная speed хранит скорость передвижения персонажа.

Теперь начинается самое интересное. Логика:

  • В строке #11 мы сначала с помощью Input.GetMouseButton() определяем, нажата ли левая кнопка мыши, и если нажата, то с помощью Input.mousePosition определяем текущее положение мыши, а потом с помощью ScreenToWorldPoint преобразуем это положение мыши в мировые координаты - это как раз те координаты, куда необходимо двигать нашего персонажа.
  • В строке #12 переменной isMoving задаём значение true, чтобы указать, что нужно нашего персонажа привести в движение.
  • А уже в строке #15 мы проверяем, если isMoving равняется true, то с помощью метода MoveTowards() мы двигаем нашего персонажа к цели. Строчкой ниже мы проверяем, если позиция нашего персонажа соответствует той позиции, куда мы шли, то необходимо нашу ходьбу прекратить, и записать в переменную isMoving значение false, чтобы указать, что двигаться больше не нужно.

На этом всё, движение 2D объекта по клику мыши готов! Как видите, здесь нет ничего сложного. Если остались вопросы, пишите в комментариях, а так же не забывайте о лайках :)

Вы можете отблагодарить автора донатом. ₽ Спасибо

Комментарии

3
Name_1196 2 года назад

как изменить скорость перемещения?

Name_1685 1 год назад

Доброго времени суток. Как сделать так, чтоб об обходил препятствия

Гости не могут оставлять комментарии. Войдите на Сайт или Зарегистрируйтесь