@yraiv

Как отследить, что объект находится около точки в 2d на unity?

Задача: 2д платформа, которая перемещается от точки А до точки Б и так по кругу
Как проверить, что платформа находится около точки ?

public GameObject Pos1;
    public GameObject Pos2;
    private bool MoveBool;
    public float speed;



    private void FixedUpdate()
    {
        if (MoveBool == false)
        {
            transform.position = new Vector2(Pos1.transform.position.x + speed * Time.deltaTime, Pos1.transform.position.y + speed * Time.deltaTime);
            if (transform.position) // что-то
            {
                MoveBool = true;

            }
        }

        else if (MoveBool == true)
        {
            transform.position = new Vector2(Pos2.transform.position.x + speed * Time.deltaTime, Pos2.transform.position.y + speed * Time.deltaTime);

            if (transform.position)//что-то
            {
                MoveBool = false;
            }
        }


        }
        
    }
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
K0TlK
@K0TlK
Буллю людей.
Проверяй дистанцию между платформой и точкой
var distance = (point.position - transform.position).magnitude;

Vector3.magnitude Возвращает длину вектора. Вот пример:
public class Example : MonoBehaviour
{
    [SerializeField] private Transform _pointA, _pointB = null;
    [SerializeField] private float _speed = 10f;
    [SerializeField] private float _closeDistance = 0.2f;

    private Transform _currentPoint;

    private void Start()
    {
        _currentPoint = _pointA;
    }

    private void FixedUpdate()
    {
        MoveTo(_currentPoint.position);
    }

    private void MoveTo(Vector3 position)
    {
        var nextPosition = transform.position;
        var delta = (position - transform.position).normalized;

        delta *= _speed * Time.deltaTime;

        nextPosition += delta;

        transform.position = nextPosition;

        UpdatePoint();
    }

    private void UpdatePoint()
    {
        var distance = (_currentPoint.position - transform.position).magnitude;
        if (distance <= _closeDistance)
        {
            SwitchPoint();
        }
    }

    private void SwitchPoint()
    {
        _currentPoint = _currentPoint == _pointA ? _pointB : _pointA;
    }

}


В UpdatePoint я рассчитываю расстояние между точкой и позицией платформы и, если оно меньше максимальной дистанции приближения, то меняю точку, к которой стремится платформа.

С тем же успехом можно сравнивать позиции платформы и точки, к которой она стремится и, если они равны, менять точку.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы