Как остановить объект, при достижении координат?
Объект двигается в сторону нажатия мыши, но не останавливается при достижении. Я пробовал сделать условие если координаты объекта и нажатия равны, то обнулять скорость, но объект пролетает мимо и это не работает.
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 - погрешность
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);
}