Как остановить объект, при достижении координат?

Объект двигается в сторону нажатия мыши, но не останавливается при достижении. Я пробовал сделать условие если координаты объекта и нажатия равны, то обнулять скорость, но объект пролетает мимо и это не работает.

private float speed;
Vector3 dir = Vector3.zero;
void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        Vector2 m_pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        dir = (m_pos - (Vector2) transform.position).normalized;
    }

    transform.Translate(dir * speed);
}

Ответы (2 шт):

Автор решения: Максим Фисман

Это может происходить потому, что ваш объект пролетает на большой скорости мимо целевой точки. Например, до цели осталось 2, а объект двигается со скоростью 3. Он просто на 1 перелетит цель и точного равенства не будет.

Вы не приложили код, которым вы проверяли равенство координат объекта, к тому же вы не описали, что происходит с объектом (не останавливается - а что? Летит дальше, выдает ошибку...), однако могу предположить, что вам следует использовать Vector3.Distance. То есть

if (Vector3.Distance(Camera.main.ScreenToWorldPoint(Input.mousePosition), transform.position) < 0.1f) // Двигаем
  • Значение 0.1 - погрешность
→ Ссылка
Автор решения: MaxProvy
    private float speed = 10f;
private Vector2 mousePos;
private Vector2 worldPosition;
 void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        mousePos = Input.mousePosition;
        worldPosition = Camera.main.ScreenToWorldPoint(mousePos);
    } 
    transform.position = Vector2.MoveTowards(transform.position, worldPosition, speed * Time.deltaTime);
}
→ Ссылка