From 6d6fa89fc5d7cc909773e7ad4e8162fb39d09662 Mon Sep 17 00:00:00 2001 From: SepComet <202308010230@stu.csust.edu.cn> Date: Thu, 2 Apr 2026 13:26:27 +0800 Subject: [PATCH] Update NearestTargetSelector.cs --- .../TargetSelector/NearestTargetSelector.cs | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Assets/GameMain/Scripts/Entity/EntityLogic/Weapon/TargetSelector/NearestTargetSelector.cs b/Assets/GameMain/Scripts/Entity/EntityLogic/Weapon/TargetSelector/NearestTargetSelector.cs index b4c7874..1f8f080 100644 --- a/Assets/GameMain/Scripts/Entity/EntityLogic/Weapon/TargetSelector/NearestTargetSelector.cs +++ b/Assets/GameMain/Scripts/Entity/EntityLogic/Weapon/TargetSelector/NearestTargetSelector.cs @@ -13,7 +13,26 @@ namespace Entity.Weapon return null; } - return TrySelectFromSpatialIndex(weapon, maxSqrRange, out EntityBase indexedTarget) ? indexedTarget : null; + if (TrySelectFromSpatialIndex(weapon, maxSqrRange, out EntityBase indexedTarget)) + { + return indexedTarget; + } + + EntityBase target = null; + float minSqrMagnitude = maxSqrRange > 0f ? maxSqrRange : float.MaxValue; + + foreach (var candidate in candidates) + { + if (candidate == null || !candidate.Available) continue; + + float sqrMagnitude = AIUtility.GetSqrMagnitudeXZ(weapon, candidate); + if (sqrMagnitude >= minSqrMagnitude) continue; + + minSqrMagnitude = sqrMagnitude; + target = candidate; + } + + return target; } private static bool TrySelectFromSpatialIndex(WeaponBase weapon, float maxSqrRange, out EntityBase target)