示例#1
0
    public override void OnImportAsset(AssetImportContext ctx)
    {
        int counter = 0;

        // Main import object
        VoxelObject importObject = ScriptableObject.CreateInstance <VoxelObject>();

        importObject.m_Scale = m_Scale;
        importObject.name    = Path.GetFileNameWithoutExtension(ctx.assetPath);

        ctx.AddObjectToAsset(importObject.name, importObject);
        ctx.SetMainObject(importObject);

        // Main game import object
        GameObject rootObject = new GameObject();

        rootObject.name = importObject.name;

        ctx.AddObjectToAsset(rootObject.name, rootObject);
        importObject.m_ModelObject = rootObject;

        List <VoxelData> allData = new List <VoxelData>();

        foreach (string voxFile in Directory.EnumerateFiles(Path.GetDirectoryName(ctx.assetPath), importObject.name + "*.vox"))
        {
            ctx.DependsOnSourceAsset(voxFile);

            // Add all separate data with model and voxel data
            Color32[] palette;
            foreach (VoxelData data in VoxelData.ParseFrom(voxFile, out palette))
            {
                allData.Add(data);

                data.name = "VOX_" + importObject.name + "_" + counter;
                ctx.AddObjectToAsset(data.name, data);

                Mesh mesh = data.GenerateMesh(m_PivotOffset, m_Scale);
                mesh.name = "MDL_" + importObject.name + "_" + counter;
                ctx.AddObjectToAsset(mesh.name, mesh);

                // Setup a game object to hold this
                GameObject modelObject = new GameObject();
                modelObject.name = "OBJ_" + importObject.name + "_" + counter;

                MeshFilter   meshFilter = modelObject.AddComponent <MeshFilter>();
                MeshRenderer renderer   = modelObject.AddComponent <MeshRenderer>();

                meshFilter.mesh   = mesh;
                renderer.material = m_SourceMaterial;

                modelObject.transform.SetParent(rootObject.transform);
                ctx.AddObjectToAsset(modelObject.name, modelObject);

                ++counter;
            }
        }

        importObject.m_VoxelData = allData.ToArray();
    }