Example #1
0
    static void Process(SAMeshCollider meshCollider)
    {
        if (meshCollider == null)
        {
            Debug.LogError("");
            return;
        }

        Cleanup(meshCollider);

        MeshCache meshCache = null;

        if (meshCollider.splitMode == SplitMode.None ||
            meshCollider.splitMode == SplitMode.Material ||
            meshCollider.splitMode == SplitMode.Primitive)
        {
            meshCache = SAMeshColliderEditorCommon.GetParentMeshCache(meshCollider);

            if (meshCache == null)
            {
                Debug.LogError("Mesh not found:" + meshCollider.name);
                return;
            }
        }

        List <ReducerTask> reducerTasks = new List <ReducerTask>();

        switch (meshCollider.splitMode)
        {
        case SplitMode.None:
            ProcessRoot(reducerTasks, meshCache, meshCollider);
            break;

        case SplitMode.Material:
            ProcessMaterial(reducerTasks, meshCache, meshCollider);
            break;

        case SplitMode.Primitive:
            ProcessPrimitive(reducerTasks, meshCache, meshCollider);
            break;

        case SplitMode.Polygon:
            ProcessPolygon(reducerTasks, meshCollider);
            break;
        }

        SAMeshColliderEditorCommon.Reduce(reducerTasks, meshCollider.isDebug);
    }
Example #2
0
    static void Process(SAMeshColliderBuilder meshColliderBuilder)
    {
        if (meshColliderBuilder == null)
        {
            Debug.LogError("");
            return;
        }

        MeshFilter[]          meshFilters          = SAColliderBuilderEditorCommon.GetMeshFilters(meshColliderBuilder.gameObject);
        SkinnedMeshRenderer[] skinnedMeshRenderers = SAColliderBuilderEditorCommon.GetSkinnedMeshRenderers(meshColliderBuilder.gameObject);

        if ((meshFilters == null || meshFilters.Length == 0) && (skinnedMeshRenderers == null || skinnedMeshRenderers.Length == 0))
        {
            Debug.LogError("Nothing MeshFilter/SkinnedMeshRenderer. Skip Processing.");
            return;
        }

        List <ReducerTask> reducerTasks = new List <ReducerTask>();

        if (meshFilters != null)
        {
            foreach (MeshFilter meshFilter in meshFilters)
            {
                Mesh       mesh      = SAColliderBuilderEditorCommon.GetMesh(meshFilter);
                Material[] materials = SAColliderBuilderEditorCommon.GetMaterials(meshFilter);
                MeshCache  meshCahce = new MeshCache(mesh, materials);
                SAMeshColliderEditorCommon.CleanupChildSAMeshColliders(meshFilter.gameObject, meshColliderBuilder.cleanupModified);
                ProcessRoot(reducerTasks, meshCahce, meshColliderBuilder, meshFilter.gameObject);
            }
        }

        if (skinnedMeshRenderers != null)
        {
            foreach (SkinnedMeshRenderer skinnedMeshRenderer in skinnedMeshRenderers)
            {
                Mesh       mesh      = SAColliderBuilderEditorCommon.GetMesh(skinnedMeshRenderer);
                Material[] materials = SAColliderBuilderEditorCommon.GetMaterials(skinnedMeshRenderer);
                MeshCache  meshCahce = new MeshCache(mesh, materials);
                SAMeshColliderEditorCommon.CleanupChildSAMeshColliders(skinnedMeshRenderer.gameObject, meshColliderBuilder.cleanupModified);
                ProcessRoot(reducerTasks, meshCahce, meshColliderBuilder, skinnedMeshRenderer.gameObject);
            }
        }

        SAMeshColliderEditorCommon.Reduce(reducerTasks, meshColliderBuilder.isDebug);
    }