public static Transform FindTarget(Transform exclude, Vector3 start, float range, LayerMask layer, Character character) { Collider[] nearby = Physics.OverlapSphere (start, range, layer); Transform nearest = null; float distance = float.MaxValue; for (int i = 0; i < nearby.Length; i++) { if (nearby[i].transform == exclude || !character.ObjectVisibleFromHeadbone (nearby[i].transform)) continue; Vector3 dirTo = (nearby[i].transform.position - character.transform.position).normalized; float relAngle = Vector3.Dot (character.transform.forward, dirTo); float view = 1 - (character.ai.fieldOfView / 90f); float d = Vector3.Distance (nearby[i].transform.position, start); if (d < distance && relAngle > view) { distance = d; nearest = nearby[i].transform; } } return nearest; }