コード例 #1
0
        /// <summary>
        /// DrawModelEntity の生成が必要なメッシュを洗い出す。
        /// また、事前にメッシュ生成が済んでいる場合は、メッシュ辞書から取得する。
        /// ・LODが登録されていない場合は、
        ///  オブジェクトトップから見つかった最初のメッシュを無加工で採用する。(デフォルトメッシュ)
        /// ・LOD枠が確保されていて、LODにオブジェクトが登録されている場合は、
        ///  そのオブジェクト以下の結合メッシュを採用する。
        /// ・LOD枠が確保されていて、LOD登録が Nothing の場合は、
        ///  オブジェクトトップから見つかった最初のメッシュを無加工で採用する。
        /// </summary>
        static public GameObject[] BuildMeshesForModelEntity
        (
            this GameObjectConversionSystem gcs_,
            GameObject main_, GameObject[] lods_,
            Func <Func <MeshElements>[]> getMeshCombineFuncs
        )
        {
            var result = new List <GameObject>(lods_.Length);

            if (lods_.Length == 0 || lods_.Where(x => x == null).Any())
            {
                if (!gcs_.IsExistingInStructureMeshDictionary(main_))
                {
                    var mesh = main_.GetComponentInChildren <MeshFilter>().sharedMesh;
                    gcs_.AddToStructureMeshDictionary(main_, mesh);
                }

                result.Add(main_);
            }

            var meshfuncs = getMeshCombineFuncs();

            foreach (var(lod, f) in (lods_, meshfuncs).Zip().Where(x => x.x != null))
            {
                if (!gcs_.IsExistingInStructureMeshDictionary(lod))
                {
                    var mesh = f().CreateMesh();
                    gcs_.AddToStructureMeshDictionary(lod, mesh);
                }

                result.Add(lod);
            }

            return(result.ToArray());
        }