Gegnerpathing Logik

This commit is contained in:
2026-10-07 14:40:02 +02:00
parent 0a801ed82c
commit 583957d993
6 changed files with 1276 additions and 33 deletions
+45 -6
View File
@@ -15,9 +15,10 @@ public class Enemy : MonoBehaviour, IMovementDirection
// Wird von CharacterRotation verwendet.
public Vector2 MovementDirection { get; private set; }
private void Start()
private void Awake()
{
targetManager = FindFirstObjectByType<EnemyTargetManager>();
targetManager =
FindFirstObjectByType<EnemyTargetManager>();
if (targetManager == null)
{
@@ -25,9 +26,31 @@ public class Enemy : MonoBehaviour, IMovementDirection
"Enemy: Kein EnemyTargetManager gefunden!",
this
);
return;
}
}
private void OnEnable()
{
if (targetManager != null)
{
targetManager.OnTargetsChanged +=
SelectClosestTarget;
}
}
private void OnDisable()
{
if (targetManager != null)
{
targetManager.OnTargetsChanged -=
SelectClosestTarget;
}
}
private void Start()
{
if (targetManager == null)
return;
SelectClosestTarget();
}
@@ -37,22 +60,27 @@ public class Enemy : MonoBehaviour, IMovementDirection
if (targetManager == null)
return;
// Kein aktuelles Ziel vorhanden.
if (currentTarget == null)
{
MovementDirection = Vector2.zero;
SelectClosestTarget();
return;
}
// Falls das Ziel deaktiviert wurde:
// Das aktuelle Ziel wurde deaktiviert.
if (!currentTarget.gameObject.activeInHierarchy)
{
SelectClosestTarget();
return;
}
MoveTowardsTarget();
// Ziel erreicht.
if (HasReachedTarget())
{
SelectClosestTarget();
@@ -61,8 +89,13 @@ public class Enemy : MonoBehaviour, IMovementDirection
private void SelectClosestTarget()
{
if (targetManager == null)
return;
currentTarget =
targetManager.GetClosestActiveTarget(transform.position);
targetManager.GetClosestActiveTarget(
transform.position
);
if (currentTarget == null)
{
@@ -72,6 +105,9 @@ public class Enemy : MonoBehaviour, IMovementDirection
private void MoveTowardsTarget()
{
if (currentTarget == null)
return;
Vector3 direction =
currentTarget.position - transform.position;
@@ -89,6 +125,9 @@ public class Enemy : MonoBehaviour, IMovementDirection
private bool HasReachedTarget()
{
if (currentTarget == null)
return false;
return Vector3.Distance(
transform.position,
currentTarget.position