private CacheMeshes NewCacheMeshes(string guid, long time) { CacheMeshes cacheMeshes = CacheMeshes.CreateInstance <CacheMeshes>(); cacheMeshes.Timestamp = time; cacheMeshes.name = guid; WriteCacheMeshes(guid, cacheMeshes); return(cacheMeshes); }
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(); }
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); }