Проблемы с последовательным движением при клике мышки

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Проблемы с последовательным движением при клике мышки

Сообщение farit 02 окт 2022, 02:45

Доброго времни суток. Я совсем зеленый ещё и мне требуеться помощь. Есть проблема с реализацией движения при клике мыши. На данный момент реализовано следующее: тыкаем в указанную точку - объект движется к ней. Если в момент движения указать другую точку объект забудет о первой и сразу напрамиться к новой цели. Задача сделать так, что бы обьект обошел все отмеченные кликом точки, т.е. если мы кликаем в трех разных местах обект должен дойти сначала до 1 точки, потом пойти ко 2, далее к 3. К сожалению так и не нашёл никакой информации как это можно реализовать, самостоятельно выходит неочень. Ниже код с реализации движения на данный момент. Благодарю.

Синтаксис:
Используется csharp
 public float speed = 10f;
    Vector2 lastClickedPos;
    bool moving;
   


    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            lastClickedPos =(Camera.main.ScreenToWorldPoint(Input.mousePosition));
            Debug.Log(lastClickedPos);
            moving = true;
        }

        if (moving && (Vector2)transform.position != lastClickedPos)
        {
            float step = speed * Time.deltaTime;
            transform.position = Vector2.MoveTowards(transform.position, lastClickedPos, step);
        }
        else
        {
            moving = false;
        }    
    }
 
farit
UNец
 
Сообщения: 8
Зарегистрирован: 02 окт 2022, 01:56

Re: Проблемы с последовательным движением при клике мышки

Сообщение samana 02 окт 2022, 12:44

Метод OnDrawGizmos и поле ShowPath вы можете удалить, но они служат для визуализации текущего пути в качестве теста в окне сцены.

Синтаксис:
Используется csharp
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float Speed = 10f;
    public bool ShowPath = true;

    private Queue<Vector2> _points = new Queue<Vector2>();

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Vector2 mouse = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            _points.Enqueue(mouse);
        }

        if (_points.Count != 0)
        {
            Vector3 target = _points.Peek();

            transform.position = Vector2.MoveTowards(transform.position, target, Speed * Time.deltaTime);
            if (transform.position == target)
            {
                _points.Dequeue();
            }
        }
    }

    private void OnDrawGizmos()
    {
        if (ShowPath == false || _points.Count == 0)
            return;


        var e = _points.GetEnumerator();
        e.MoveNext();

        Vector2 prevPoint = e.Current;
        Gizmos.DrawLine(transform.position, prevPoint);
        Gizmos.DrawWireSphere(prevPoint, 0.2f);

        while (e.MoveNext())
        {
            Gizmos.DrawLine(prevPoint, e.Current);
            Gizmos.DrawWireSphere(e.Current, 0.2f);

            prevPoint = e.Current;
        }
    }
}
 


Изображение
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Проблемы с последовательным движением при клике мышки

Сообщение farit 02 окт 2022, 13:41

Гигантское спасибо
farit
UNец
 
Сообщения: 8
Зарегистрирован: 02 окт 2022, 01:56


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 23