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); }
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; }