示例#1
0
    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);
    }
示例#2
0
    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);
    }
示例#3
0
    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.");
    }