Ejemplo n.º 1
0
    IEnumerable DoCheckMeshRendererCoroutine(string prefabName, GameObject scenePrefab)
    {
        List <GameObject> rendererList = new List <GameObject>();

        CUnityUtil.FindChildLeaf(typeof(MeshRenderer), scenePrefab, rendererList);

        CBlockMeshInfo meshInfo = new CBlockMeshInfo();

        //检查每个包含MeshRenderer的go
        foreach (var go in rendererList)
        {
            //MeshRenderer renderer = go.GetComponent<MeshRenderer>();

            MeshFilter[] meshes = go.GetComponentsInChildren <MeshFilter>();

            int nFaces = 0;
            foreach (var ms in meshes)
            {
                Mesh mesh = ms.sharedMesh != null ? ms.sharedMesh : ms.mesh;
                nFaces += mesh.triangles.Length / 3;
            }

            var entry = new CMeshEntry()
            {
                name   = go.name,
                parent = prefabName,
                faces  = nFaces,
            };
            meshInfo.meshList.Add(entry);

            _ListEntries.Add(entry);
        }

        meshInfo.Sort();
        _DicPrefabMeshInfo.Add(prefabName, meshInfo);

        yield return(null);
    }
Ejemplo n.º 2
0
    IEnumerable DoCheckMeshRendererCoroutine(string prefabName, SceneConfig config)
    {
        Transform blockRootTran = config.transform.Find("BlockObjects");

        if (null == blockRootTran)
        {
            blockRootTran = config.transform;
        }

        int count = 0;
        int total = config._BlockPositionList.Count;

        foreach (SceneConfig.CPositionSetting currentPos in config._BlockPositionList)
        {
            ++count;

            string shortName = System.IO.Path.GetFileNameWithoutExtension(prefabName);
            string blockName = System.IO.Path.GetFileName(currentPos._BlockName);
            GameDataCheckMan.Instance.SetDesc(string.Format("{0} 检查Obj: {1}", shortName, blockName));
            GameDataCheckMan.Instance.SetPartProgress((float)count / total);
            yield return(null);

            var asset = AssetBundleCheck.Instance.LoadAsset(currentPos._BlockName);
            if (asset == null)
            {
                _ErrorString += string.Format("terrain加载Object错误: {0}\n", currentPos._BlockName);
                continue;
            }

            //创建
            //TextLogger.Instance.WriteLine(string.Format("Checking Scene Object: {0}", currentPos._BlockName));
            var obj = GameObject.Instantiate(asset) as GameObject;
            obj.transform.parent = blockRootTran;

            List <GameObject> rendererList = new List <GameObject>();
            CUnityUtil.FindChildLeaf(typeof(MeshRenderer), obj, rendererList);

            CBlockMeshInfo meshInfo = new CBlockMeshInfo();

            //检查每个包含MeshRenderer的go
            foreach (var go in rendererList)
            {
                //MeshRenderer renderer = go.GetComponent<MeshRenderer>();

                MeshFilter[] meshes = go.GetComponentsInChildren <MeshFilter>();

                int nFaces = 0;
                foreach (var ms in meshes)
                {
                    Mesh mesh = ms.sharedMesh != null ? ms.sharedMesh : ms.mesh;
                    nFaces += mesh.triangles.Length / 3;
                }

                var entry = new CMeshEntry()
                {
                    name   = go.name,
                    parent = currentPos._BlockName,
                    faces  = nFaces,
                };
                meshInfo.meshList.Add(entry);

                _ListEntries.Add(entry);
            }

            meshInfo.Sort();
            _DicBlockMeshInfo.Add(currentPos._BlockName, meshInfo);

            GameObject.DestroyImmediate(obj);
        }

        yield return(null);
    }