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));
}
}
}
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;
}
}
}