Преследование персонажа по оси Х

В платформере пила преследует персонажа, все хорошо, но получается, что когда персонаж прыгает, то пила следует за ним. Как сделать движение пилы только по оси Х?

void Start()
{
    target = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
    rb = GetComponent<Rigidbody2D>();
}

void Update()
{
    transform.position = Vector2.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
}

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

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

Если вы хотите изменять движение только по оси X, то вам не нужно изменять его положение по оси Y. То есть вот эту строчку:

transform.position = Vector2.MoveTowards(transform.position, target.position, speed * Time.deltaTime);

нужно заменить на что-то подобное:

transform.position = new Vector2(Vector2.MoveTowards(transform.position, targetPosition, Time.deltaTime).x, [пила].transform.position.y);

То есть сначала с помощью функции вы сдвигаете пилу к персонажу (причем и по х и по y), потом с помощью .x берете смещение только по х, после чего в качестве координаты y подставляете координату сомой пилы по y, то есть то же, что и было до сдвига.

Другой вариант - это заменять y на на необходимый (то есть на y самой пилы) прямо в функции MoveTowards, тогда эта строка будет выглядеть так:

transform.position = Vector2.MoveTowards(transform.position, new Vector2(target.position.x, [пила].transform.position.y), speed * Time.deltaTime);

Третий вариант - это сделать переменную targetPosition, которая будет равна:

targetPosition = new Vector2(target.position.x, [пила].transform.position.y)

Остается только заменить точку назначения (второй параметр) в функции MoveTowards на переменную targetPosition.

Надеюсь помог! Если есть вопросы, задавайте!

→ Ссылка