Вот несколько способов, как можно организовать движение врага по оси в Unity 2D:
С помощью скрипта на C# с постоянным перемещением:
Создайте пустой объект (или возьмите вашего врага) и добавьте к нему скрипт.
В скрипте объявите скорость движения и направление.
В методе Update используйте простое перемещение с помощью transform.Translate.
Пример кода, в котором враг двигается слева направо между двумя точками:
using UnityEngine;
public class EnemyMovement : MonoBehaviour { public float speed = 2f; // скорость движения public float distance = 5f; // расстояние, на которое он отходит от начальной точки private Vector2 startPos; // начальная позиция private bool movingRight = true; // флаг направления
void Start()
{
startPos = transform.position; // запоминаем стартовую позицию
}
void Update()
{
if (movingRight)
{
transform.Translate(Vector2.right * speed * Time.deltaTime);
// проверяем, не ушёл ли объект дальше нужного расстояния
if (Vector2.Distance(startPos, transform.position) >= distance)
{
movingRight = false; // меняем направление на противоположное
}
}
else
{
transform.Translate(Vector2.left * speed * Time.deltaTime);
if (Vector2.Distance(startPos, transform.position) >= distance)
{
movingRight = true;
// чтобы движение продолжалось симметрично, можно обновить startPos
startPos = transform.position;
}
}
}
- С помощью анимации:
Создайте анимацию, в которой враг перемещается из точки А в точку Б (например, с помощью Animation или аниматора в Unity).
- Настройте, чтобы анимация проигрывалась циклично.
С использованием компонентов физики:
Если у врага есть Rigidbody2D, можно управлять скоростью через rb.velocity = new Vector2(скорость, 0), при этом меняя знак скорости для изменения направления.
С помощью Waypoints (точек пути):
Создайте несколько Empty-объектов, расставьте их в нужных позициях.
В скрипте перемещайте врага от одной точки к следующей.
Как только враг достигает текущей точки, переключайте его цель на следующую.
Самый простой вариант — движение из стороны в сторону (первый пример кода). Если нужно движение строго по оси Y, меняйте Vector2.right на Vector2.up и так далее.