示例#1
0
    private void FillObjects()
    {
        _badObjects = new List <BadObjectsInfo>();

        BadObjectsInfo temp;
        var            objects = FindObjectsOfType <BadObjects>();
        Bounds         bound;

        for (int i = objects.Length - 1; i >= 0; --i)
        {
            temp        = new BadObjectsInfo();
            temp.Obj    = objects[i];
            temp.Points = objects[i].GetComponent <BadObjects>().GetPointsToCheck();

            _badObjects.Add(temp);
        }
    }
示例#2
0
    private bool CheckIfAllObjectsHidden()
    {
        bool hitAnyObject = false;

        int layerToCheck =
            1 << LayerMask.NameToLayer(LayerReference.ActiveObjects) |
                1 << LayerMask.NameToLayer(LayerReference.StaticObjects) |
                1 << LayerMask.NameToLayer(LayerReference.ToHide);

        Vector3    cameraPosition = Camera.main.transform.position;
        Ray        ray            = new Ray(cameraPosition, Vector3.forward);
        RaycastHit hitInfo;

        for (int i = _badObjects.Count - 1; !hitAnyObject && i >= 0; --i)
        {
            if (!_badObjects[i].Obj.isActiveAndEnabled)
            {
                continue;
            }

            for (int j = _badObjects[i].Points.Count - 1; !hitAnyObject && j >= 0; --j)
            {
                ray.direction = _badObjects[i].Points[j] - cameraPosition;
                if (Physics.Raycast(ray, out hitInfo, float.MaxValue, layerToCheck))
                {
                    if (hitInfo.collider.gameObject.layer == LayerMask.NameToLayer(LayerReference.ToHide))
                    {
                        hitAnyObject        = true;
                        _lastObjectDetected = _badObjects[i];
                    }
                }
            }
        }

        return(!hitAnyObject);
    }