Когда враг ходит туда‑сюда между двумя точками — базовая механика любого платформера.
Сохраняй, пригодится в каждом втором проекте! 👇
Компоненты:
PointA, PointB(границы патрулирования) + Rigidbody2D (кинематик или динамик – по желанию).using UnityEngine;
public class Patrol : MonoBehaviour
{
[SerializeField] private Transform pointA;
[SerializeField] private Transform pointB;
[SerializeField] private float speed = 3f;
private Rigidbody2D rb;
private Transform targetPoint;
void Start()
{
rb = GetComponent<Rigidbody2D>();
targetPoint = pointA;
}
void FixedUpdate()
{
// направление к цели
Vector2 direction = (targetPoint.position - transform.position).normalized;
// двигаем через velocity (сохраняем гравитацию по Y)
rb.velocity = new Vector2(direction.x * speed, rb.velocity.y);
// если почти дошли по X – меняем цель
if (Mathf.Abs(targetPoint.position.x - transform.position.x) < 0.1f)
{
targetPoint = targetPoint == pointA ? pointB : pointA;
// разворачиваем спрайт (опционально)
Flip();
}
}
private void Flip()
{
Vector3 scale = transform.localScale;
scale.x *= -1;
transform.localScale = scale;
}
}
✅ Плюсы: враг не пройдёт сквозь стены, реагирует на физику.
❌ Минусы: нужно следить за застреванием (можно добавить Raycast для проверки края).
📌 Сохрани пост, чтобы не потерять коды.
🔔 Подпишись – дальше будет ещё больше готовых решений для 2D и не только.
👉 Akrus Games | Unity