static void WriteLevel(WebGLLevel level, Stream outStream) { if (EditorUtility.DisplayCancelableProgressBar("Exporting Level", "Writing JSON", 1.0f)) { throw new Exception("User canceled export"); } // Write out JSON StringTemplateGroup templateGroup = new StringTemplateGroup("MG", templatePath, typeof(DefaultTemplateLexer)); StringTemplate animTemplate = templateGroup.GetInstanceOf("WebGLLevel"); animTemplate.SetAttribute("level", level); string content = animTemplate.ToString(); Byte[] bytes = new UTF8Encoding(true).GetBytes(CleanJSON(content)); outStream.Write(bytes, 0, bytes.Length); }
static WebGLLevel BuildLevel(Dictionary <Mesh, List <MeshFilter> > staticPrefabs, int instanceCount, string[] lightmaps) { WebGLLevel level = new WebGLLevel(); level.name = "WebGL Level"; level.lightmaps = lightmaps; level.props = new List <WebGLProp>(); float exportedInstances = 0.0f; foreach (Mesh mesh in staticPrefabs.Keys) { MeshFilter meshFilter = staticPrefabs[mesh][0]; WebGLProp prop = new WebGLProp(); prop.instances = new List <WebGLPropInstance>(); prop.modelPath = "root/model/" + meshFilter.name; foreach (MeshFilter instance in staticPrefabs[mesh]) { WebGLPropInstance propInstance = new WebGLPropInstance(); propInstance.pos = instance.transform.position; //propInstance.pos.x *= -1.0f; propInstance.rot = instance.transform.rotation; // We're only storing a single scalar value for scale, take the max scale component propInstance.scale = Math.Max(Math.Max(instance.transform.lossyScale.x, instance.transform.lossyScale.y), instance.transform.lossyScale.z); propInstance.lightmapId = instance.renderer.lightmapIndex; propInstance.lightmapScale = new Vector2(instance.renderer.lightmapTilingOffset.x, instance.renderer.lightmapTilingOffset.y); propInstance.lightmapOffset = new Vector2(instance.renderer.lightmapTilingOffset.z, instance.renderer.lightmapTilingOffset.w); if (EditorUtility.DisplayCancelableProgressBar("Exporting Level", "Processing Props", exportedInstances / instanceCount)) { throw new Exception("User canceled export"); } exportedInstances += 1.0f; prop.instances.Add(propInstance); } level.props.Add(prop); } return(level); }
static void ExportLevel() { if (!CreateTargetFolder()) { return; } string filename = "level1"; try { // Export Lightmaps string[] lightmapPaths = ExportLightmaps(); // Find all prefabs Dictionary <Mesh, List <MeshFilter> > staticPrefabs; int instanceCount = FindInstances(out staticPrefabs); WebGLLevel level = BuildLevel(staticPrefabs, instanceCount, lightmapPaths); // Write out level file using (FileStream stream = new FileStream(levelFolder + "/" + filename + ".wgllevel", FileMode.Create)) { WriteLevel(level, stream); stream.Close(); } // Export prefabs ExportPrefabs(staticPrefabs); // TODO: Write out instances // TODO: Write out static geometry } catch (Exception ex) { Debug.LogError(ex.Message); } EditorUtility.ClearProgressBar(); Debug.Log("Level export complete."); }