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(); }