Basis festgelegt

This commit is contained in:
2026-10-06 09:31:55 +02:00
parent 9e5822a37c
commit 0a801ed82c
17 changed files with 1243 additions and 0 deletions
+97
View File
@@ -0,0 +1,97 @@
using UnityEngine;
public class Enemy : MonoBehaviour, IMovementDirection
{
[Header("Movement")]
[SerializeField]
private float moveSpeed = 2f;
[SerializeField]
private float targetReachedDistance = 0.1f;
private EnemyTargetManager targetManager;
private Transform currentTarget;
// Wird von CharacterRotation verwendet.
public Vector2 MovementDirection { get; private set; }
private void Start()
{
targetManager = FindFirstObjectByType<EnemyTargetManager>();
if (targetManager == null)
{
Debug.LogError(
"Enemy: Kein EnemyTargetManager gefunden!",
this
);
return;
}
SelectClosestTarget();
}
private void Update()
{
if (targetManager == null)
return;
if (currentTarget == null)
{
MovementDirection = Vector2.zero;
SelectClosestTarget();
return;
}
// Falls das Ziel deaktiviert wurde:
if (!currentTarget.gameObject.activeInHierarchy)
{
SelectClosestTarget();
return;
}
MoveTowardsTarget();
if (HasReachedTarget())
{
SelectClosestTarget();
}
}
private void SelectClosestTarget()
{
currentTarget =
targetManager.GetClosestActiveTarget(transform.position);
if (currentTarget == null)
{
MovementDirection = Vector2.zero;
}
}
private void MoveTowardsTarget()
{
Vector3 direction =
currentTarget.position - transform.position;
MovementDirection = new Vector2(
direction.x,
direction.y
).normalized;
transform.position = Vector3.MoveTowards(
transform.position,
currentTarget.position,
moveSpeed * Time.deltaTime
);
}
private bool HasReachedTarget()
{
return Vector3.Distance(
transform.position,
currentTarget.position
) <= targetReachedDistance;
}
}