Я написал код для системы обнаружения игроков.У меня есть босс, который будет продолжать искать позицию игрока, и как только игрок окажется в пределах определенного радиуса триггера сферического коллайдера, игрок будет обнаружен.Это делается с помощью raycast и OnTriggerStay и OnTriggerExit.
Проблема в том, что система обнаружения игроков не очень точна, поэтому иногда она работает, а иногда нет.Кажется, я не могу найти или понять, почему.
Вот часть кода (представляющая интерес), которую я написал:
void OnTriggerStay(Collider other)
{
if (other.gameObject.tag == "player")
{
playerDetected = false;
Vector3 direction = other.transform.position - transform.position;
float angle = Vector3.Angle(direction, transform.forward);
Debug.DrawRay(transform.position + transform.up / 2, direction, Color.green);
if (angle < fieldOfView)
{
RaycastHit hit;
//if (Physics.Raycast(transform.position + transform.up / 2, direction, out hit, col.radius, ignoreRaycast))
if (Physics.Raycast(transform.position + transform.up / 2, direction,out hit, col.radius))
{
if (hit.collider.gameObject.tag == "player")
{
playerDetected = true;
}
}
}
}
}
void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "player")
{
playerDetected = false;
}
}
, а это полный код: https://pastebin.com/YZH9Fc99
Это покажет вам поведение (посмотрите, как включается и отключается тиканье PlayerDetected) https://gyazo.com/74961847eca520a335d18c194201d0c2