Beispiel #1
0
    // ==========================================================================================================================================
    // get bounds from renderer(s)
    protected Bounds GetRendererBounds(bool ParamRecalculate)
    {
        if (!ParamRecalculate && rendererBounds != null)
        {
            return(rendererBounds);
        }

        rendererBounds = MetaRenderer.GetBoundsFromRenderers(renderers);
        return(rendererBounds);
    }
Beispiel #2
0
    // ==================================================================================================================================
    // ...
    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();
    }