Beispiel #1
0
    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;
    }
Beispiel #2
0
 protected virtual float TestPerception(Perceptible perceptible)
 {
     return 0;
 }