// ========================================================================================================================================== // get bounds from renderer(s) protected Bounds GetRendererBounds(bool ParamRecalculate) { if (!ParamRecalculate && rendererBounds != null) { return(rendererBounds); } rendererBounds = MetaRenderer.GetBoundsFromRenderers(renderers); return(rendererBounds); }
// ================================================================================================================================== // ... protected void BuildStructure() { // Prepare children list childrens = GetAllChilds(gameObject); if (childrens.Count == 0) { multiTransform = false; } else { multiTransform = true; } // Get renderer(s) if (multiTransform) { renderers = gameObject.GetComponentsInChildren <Renderer>(); if (renderers.Length > 1) { multiRenderer = true; } else if (renderers.Length == 1) { multiRenderer = false; } } else { renderers = new Renderer[1]; renderers[0] = gameObject.GetComponent <Renderer>(); } // Get collider(s) bool colliderFound = false; if (multiTransform) { colliders = gameObject.GetComponentsInChildren <Collider>(); if (colliders.Length > 1) { multiCollider = true; colliderFound = true; } else if (colliders.Length == 1) { colliderFound = true; } } else { colliders = new Collider[1]; colliders[0] = gameObject.GetComponent <Collider>(); if (colliders[0] != null) { colliderFound = true; } } // Check collider(s), and auto-create colliders from renderers if no collider was found if (!colliderFound && AutoGenerateMeshColliders) { generatedColliders = new List <Collider>(); if (multiTransform) { if (renderers.Length == 0) { // Add non-mesh collider or attach a dummy model if (GenerateDummyIfNoMeshFound) { GameObject tmpGO = GameObject.CreatePrimitive(PrimitiveType.Sphere); tmpGO.transform.position = gameObject.transform.position; tmpGO.transform.rotation = gameObject.transform.rotation; tmpGO.transform.parent = gameObject.transform; SphereCollider SC = tmpGO.GetComponent <SphereCollider>(); SC.name = advancedName; generatedColliders.Add(SC); } } else if (renderers.Length == 1) { // Add a mesh collider from r0 MeshCollider MC = renderers[0].gameObject.AddComponent <MeshCollider>(); MC.sharedMesh = MetaRenderer.GetMesh(renderers[0]); MC.name = advancedName; MC.convex = ConvexMeshColliders; generatedColliders.Add(MC); } else if (renderers.Length > 1) { // loop and add mesh colliders int i; for (i = 0; i < renderers.Length; i++) { MeshCollider MC = renderers[i].gameObject.AddComponent <MeshCollider>(); MC.sharedMesh = MetaRenderer.GetMesh(renderers[i]); MC.name = advancedName; MC.convex = ConvexMeshColliders; generatedColliders.Add(MC); multiCollider = true; colliders = generatedColliders.ToArray(); } } } else { if (renderers[0] == null) { // Add non-mesh collider or attach a dummy model GameObject tmpGO = GameObject.CreatePrimitive(PrimitiveType.Sphere); tmpGO.transform.position = gameObject.transform.position; tmpGO.transform.rotation = gameObject.transform.rotation; tmpGO.transform.parent = gameObject.transform; SphereCollider SC = tmpGO.GetComponent <SphereCollider>(); SC.name = advancedName; generatedColliders.Add(SC); } else if (renderers[0] != null) { // Add a mesh collider from r0 MeshCollider MC = renderers[0].gameObject.AddComponent <MeshCollider>(); MC.sharedMesh = MetaRenderer.GetMesh(renderers[0]); MC.name = advancedName; MC.convex = ConvexMeshColliders; generatedColliders.Add(MC); } } } // ... UpdateChildren(); }