Я программировал способность для Hack n Slash, которая должна проверять Единицы внутри кругового среза (или между двумя углами с максимальной длиной).Но я застрял на том, как проверить, находится ли юнит внутри дуги.
Сценарий (недостаточно, репутация для изображения, извините, я новичок)
Я в настоящее времяиспользуйте Physics2D.OverlapSphere () , чтобы получить все объекты в максимальном диапазоне.Затем я перебираю все найденные объекты, чтобы увидеть, находятся ли они в пределах двух указанных мной углов.И все же это приводит к непредсказуемым результатам, вероятно потому, что углам не нравятся отрицательные значения и значения выше 360.
Как я могу сделать эту работу или есть лучший способ сделать это?Возможно, мне нужно изменить способ проверки того, находится ли угол в пределах.
Заранее спасибо, ребята!Я мог бы ответить с некоторой задержкой, поскольку я не буду на своем ноутбуке пару часов.
Вот фрагмент кода:
public static List<EntityBase> GetEntitiesInArc(Vector2 startPosition, float angle, float angularWidth, float radius)
{
var colliders = Physics2D.OverlapCircleAll(startPosition, radius, 1 << LayerMask.NameToLayer("Entity"));
var targetList = new List<EntityBase>();
var left = angle - angularWidth / 2f;
var right = angle + angularWidth / 2f;
foreach (var possibleTarget in colliders)
{
if (possibleTarget.GetComponent<EntityBase>())
{
var possibleTargetAngle = Vector2.Angle(startPosition, possibleTarget.transform.position);
if (possibleTargetAngle >= left && possibleTargetAngle <= right)
{
targetList.Add(possibleTarget.GetComponent<EntityBase>());
}
}
}
return targetList;
}