protected override float TestPerception(Perceptible perceptible) { Vector3 posDiff = (perceptible.transform.position-transform.position); float dist = posDiff.magnitude; Vector3 direction = posDiff.normalized; float angle = Vector3.Angle(transform.forward, direction); float output = Mathf.Clamp01(1.0f-dist/radius); if (output > 0 && angle > actualPerceptionAngle) { output = 0; } if (output > 0) { RaycastHit hit; if (Physics.Raycast(transform.position, direction, out hit, dist)) { bool hitPerceptible = perceptible.gameObject == hit.collider.gameObject; hitPerceptible |= perceptible.transform.IsChildOf(hit.collider.transform); if (!hitPerceptible) { output = 0; } } } return output; }
protected virtual float TestPerception(Perceptible perceptible) { return 0; }