Ejemplo n.º 1
0
        private CacheMeshes NewCacheMeshes(string guid, long time)
        {
            CacheMeshes cacheMeshes = CacheMeshes.CreateInstance <CacheMeshes>();

            cacheMeshes.Timestamp = time;
            cacheMeshes.name      = guid;

            WriteCacheMeshes(guid, cacheMeshes);
            return(cacheMeshes);
        }
Ejemplo n.º 2
0
        private void WriteCacheMeshes(string guid, CacheMeshes cacheMeshes)
        {
            string path = GetAssetPath(guid);

            if (System.IO.Directory.Exists(k_CachePath) == false)
            {
                System.IO.Directory.CreateDirectory(k_CachePath);
            }

            AssetDatabase.CreateAsset(cacheMeshes, path);
            AssetDatabase.SaveAssets();
        }
Ejemplo n.º 3
0
        private Mesh GetMesh(Mesh source, float quality, string guid, long time)
        {
            CacheMeshes meshes            = GetCacheMeshes(guid, time);
            string      simplifierTypeStr = AutoLOD.meshSimplifierType.AssemblyQualifiedName;

            //Compare three decimal places
            int compareQuality = (int)(quality * 1000.0f + 0.5f);

            for (int i = 0; i < meshes.Meshes.Count; ++i)
            {
                var mesh = meshes.Meshes[i];

                if (mesh.Mesh == null)
                {
                    meshes.Meshes[i] = meshes.Meshes.Last();
                    meshes.Meshes.RemoveAt(meshes.Meshes.Count - 1);
                    i -= 1;
                    continue;
                }

                int meshQuality = (int)(mesh.Quality * 1000.0f + 0.5f);
                if (mesh.SimplifierType == simplifierTypeStr && meshQuality == compareQuality)
                {
                    return(mesh.Mesh);
                }
            }

            //Mesh not found in cache.
            //need create mesh.
            Mesh simplifiedMesh = SimplifyMesh(source, quality, (m) =>
            {
                string path = GetAssetPath(guid);

                AssetDatabase.AddObjectToAsset(m, path);
                AssetDatabase.SaveAssets();
            });

            CacheMesh cacheMesh = new CacheMesh();

            cacheMesh.Mesh           = simplifiedMesh;
            cacheMesh.Quality        = quality;
            cacheMesh.SimplifierType = simplifierTypeStr;

            meshes.Meshes.Add(cacheMesh);

            EditorUtility.SetDirty(meshes);
            AssetDatabase.SaveAssets();

            return(simplifiedMesh);
        }