Необходимо отслеживать, появился ли игрок в зоне видимости бота

Я пишу игру на юнити. Мне необходимо реализовать зону, зайдя в которую, игрок бы провоцировал на себя врагов. Зона естественно привязана непосредственно к врагу. При обнаружении вошедшего враг разворачивается к нему и направляется, чтоб атаковать. Я пытался это реализовать через коллайдеры, но в таком случае игрок может атаковать врага ударяя по коллайдеру. Пытался так же реализовать через Physics.CheckSphere(), но в таком случае не получается проверить, кто вошел в зону видимости. А мне желательно, чтоб когда игрок выходит из зоны видимости - враги переставали бы его преследовать. Можно конечно реализовать это через проверку, находится ли он в зоне видимости через тот же Physics.CheckSphere(), а потом в зависимости от этого атаковать найденного еще при старте игрока, но хотелось бы без таких сложностей.


    private void Attack()
    {
        if (Physics.Raycast(_head.transform.position, _head.transform.forward, out RaycastHit hitInfo, _attackDistance))
        {
            if (hitInfo.transform.TryGetComponent(out IAttacktableObject attacktableObject))
            {
                attacktableObject.Damaged(_damage);
            }
        }
    }

Метод, что производит атаку


Ответы (1 шт):

Автор решения: KOTlK

При рейкасте указывай QueryTriggerInteraction.Ignore, чтобы рейкаст игнорировал триггеры и взаимодействовал только с коллайдерами.


if (Physics.RaycastNonAlloc(ray, hits, maxDistance, layerMask, QueryTriggerInteraction.Ignore) > 0)
{
    ///Do stuff
}
→ Ссылка