50 lines
1.2 KiB
C#
50 lines
1.2 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class EnemyTargetManager : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
private List<Transform> targetPoints = new List<Transform>();
|
|
|
|
public Transform GetClosestActiveTarget(Vector3 position)
|
|
{
|
|
List<Transform> closestTargets =
|
|
new List<Transform>();
|
|
|
|
float closestDistanceSqr = float.MaxValue;
|
|
|
|
foreach (Transform target in targetPoints)
|
|
{
|
|
if (target == null || !target.gameObject.activeInHierarchy)
|
|
continue;
|
|
|
|
float distanceSqr =
|
|
(target.position - position).sqrMagnitude;
|
|
|
|
if (distanceSqr < closestDistanceSqr)
|
|
{
|
|
closestDistanceSqr = distanceSqr;
|
|
|
|
closestTargets.Clear();
|
|
closestTargets.Add(target);
|
|
}
|
|
else if (Mathf.Approximately(
|
|
distanceSqr,
|
|
closestDistanceSqr))
|
|
{
|
|
closestTargets.Add(target);
|
|
}
|
|
}
|
|
|
|
if (closestTargets.Count == 0)
|
|
return null;
|
|
|
|
int randomIndex = Random.Range(
|
|
0,
|
|
closestTargets.Count
|
|
);
|
|
|
|
return closestTargets[randomIndex];
|
|
}
|
|
}
|