Basis festgelegt
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user