Задать вопрос
@1nkki

Как заставить двигаться объект в сторону курсора?

У меня есть объект и мне нужно чтобы он начал двигаться в сторону курсора, а потом летел самостоятельно. То есть мне надо что бы направление было задано курсором и потом объект летел в его сторону.
  • Вопрос задан
  • 96 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
@SWA512
Gamedev
Код примерный, не рабочий:
using UnityEngine;

public class MoveTowardsCursorCoroutine : MonoBehaviour
{
    public float speed = 5f;
    public float targetDistance = 1f;

    private Coroutine moveCoroutine;

    IEnumerator MoveToTarget(Vector3 target)
    {
        while (true)
        {
            Vector3 direction = (target - transform.position).normalized;
            float distance = Vector3.Distance(transform.position, target);

            // Если достигли цели, начинаем двигаться по инерции
            if (distance <= targetDistance)
            {
                // Задаем новую цель немного впереди текущей позиции
                target = transform.position + direction * 10f; // Примерная дистанция инерции
            }

            // Плавное перемещение
            transform.position += direction * speed * Time.deltaTime;

            yield return null;
        }
    }

    void Update()
    {
        // Получаем позицию курсора в мировых координатах
        Vector3 mousePosition = Input.mousePosition;
        mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
        mousePosition.z = transform.position.z;

        // Если корутина не запущена, запускаем новую
        if (moveCoroutine == null)
        {
            moveCoroutine = StartCoroutine(MoveToTarget(mousePosition));
        }
    }
}
Ответ написан
Комментировать
@1nkki Автор вопроса
рабочий код

using UnityEngine;

public class Schoot : MonoBehaviour
{
    public float speed = 5f; // Скорость движения объекта
    private Vector2 direction; // Направление движения
    private Rigidbody2D rb;
    private bool isMoving = false; // Флаг, указывающий, движется ли объект

    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        // Получаем позицию курсора в мировых координатах
        Vector2 cursorPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        // Если по нажатию мыши, задаем направление и начинаем движение
        if (Input.GetMouseButtonDown(0))
        {
            direction = (cursorPosition - (Vector2)transform.position).normalized;
            isMoving = true;
        }
    }

    void FixedUpdate()
    {
        if (isMoving)
        {
            rb.velocity = direction * speed;
        }
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы