Esempio n. 1
0
        public static Sphere GetGlobalBoundingSphere(this GameObject go, BoundingSphereAlgorithm algorithm, bool bRecurseChildren = true)
        {
            var s = new Sphere(go.transform.position, 0.0f);

            var rend = go.GetComponent <Renderer>();

            if (rend != null)
            {
                s.Encapsulate(rend.GetGlobalBoundingSphere(algorithm));
            }
            var coll = go.GetComponent <Collider>();

            if (coll != null)
            {
                s.Encapsulate(coll.GetGlobalBoundingSphere(algorithm));
            }

            if (bRecurseChildren)
            {
                foreach (Transform child in go.transform)
                {
                    s.Encapsulate(GetGlobalBoundingSphere(child.gameObject, algorithm, bRecurseChildren));
                }
            }

            return(s);
        }
Esempio n. 2
0
        public void Recalculate()
        {
            if (_rb == null)
            {
                _colliders    = new Collider[] { };
                _sphereBounds = new Sphere();
                _rectBounds   = new Bounds();
                return;
            }

            _colliders = (from c in _rb.GetComponentsInChildren <Collider>(false)
                          where (_includeTriggers || !c.isTrigger) //TODO allow excluding colliders based on a list
                          select c).ToArray();

            if (_colliders.Length > 0)
            {
                _sphereBounds = Sphere.FromCollider(_colliders[0], _algorithm, false);
                _rectBounds   = _colliders[0].bounds;
                for (int i = 1; i < _colliders.Length; i++)
                {
                    _sphereBounds.Encapsulate(Sphere.FromCollider(_colliders[i], _algorithm, false));
                    _rectBounds.Encapsulate(_colliders[i].bounds);
                }
            }
            else
            {
                _sphereBounds = new Sphere();
                _rectBounds   = new Bounds();
            }
        }
        public static Sphere GetGlobalBoundingSphere(this GameObject go, BoundingSphereAlgorithm algorithm, bool bRecurseChildren = true)
        {
            var s = new Sphere(go.transform.position, 0.0f);
            if (go.renderer != null) s.Encapsulate(go.renderer.GetGlobalBoundingSphere(algorithm));
            if (go.collider != null) s.Encapsulate(go.collider.GetGlobalBoundingSphere(algorithm));

            if (bRecurseChildren)
            {
                foreach (Transform child in go.transform)
                {
                    s.Encapsulate(GetGlobalBoundingSphere(child.gameObject, algorithm, bRecurseChildren));
                }
            }

            return s;
        }