Необходимо отслеживать, появился ли игрок в зоне видимости бота
Я пишу игру на юнити. Мне необходимо реализовать зону, зайдя в которую, игрок бы провоцировал на себя врагов. Зона естественно привязана непосредственно к врагу. При обнаружении вошедшего враг разворачивается к нему и направляется, чтоб атаковать. Я пытался это реализовать через коллайдеры, но в таком случае игрок может атаковать врага ударяя по коллайдеру. Пытался так же реализовать через 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 шт):
При рейкасте указывай QueryTriggerInteraction.Ignore, чтобы рейкаст игнорировал триггеры и взаимодействовал только с коллайдерами.
if (Physics.RaycastNonAlloc(ray, hits, maxDistance, layerMask, QueryTriggerInteraction.Ignore) > 0)
{
///Do stuff
}