public override void OnImportAsset(AssetImportContext ctx) { VoxFileReader file = new VoxFileReader(ctx.assetPath); fileName = getName(ctx); path = ctx.assetPath; gameObject = new GameObject(fileName + "-prefab"); gameObject.AddComponent <MeshRenderer>(); var filter = gameObject.AddComponent <MeshFilter>(); var model = VoxelModelInit(file); Material material = new Material(GetDefaulTexture()); material.name = fileName + "-Material"; material.SetTexture("_BaseMap", file.texturePalette); material.SetColor("_BaseColor", Color.white); var setting = VoxelSettingInit(file, material); ctx.AddObjectToAsset(fileName + "VoxelPrefab", gameObject); saveMesh(gameObject, ctx, setting, model); ctx.AddObjectToAsset(fileName + "-VoxelModel", model); ctx.AddObjectToAsset(fileName + "texture", file.texturePalette, file.texturePalette); ctx.AddObjectToAsset(fileName + "-VoxelMaterial", material); setting.name = fileName + "-VoxelSetting"; if (ImportedSetting == null) { ctx.AddObjectToAsset(fileName + "-VoxelSetting", setting); } }
Settings VoxelSettingInit(VoxFileReader file, Material material) { if (ImportedSetting != null) { return(ImportedSetting); } var setting = ScriptableObject.CreateInstance <Settings>(); setting.AddRule(); setting.RenderRules[0].material = material; return(setting); }
VoxelModel VoxelModelInit(VoxFileReader file) { var model = ScriptableObject.CreateInstance <VoxelModel>(); model.name = fileName + "-VoxelModel"; model.data = new ushort[file.ModelList[0].GetLength(0) * file.ModelList[0].GetLength(1) * file.ModelList[0].GetLength(2)]; for (int x = 0; x < file.ModelList[0].GetLength(0); x++) { for (int y = 0; y < file.ModelList[0].GetLength(1); y++) { for (int z = 0; z < file.ModelList[0].GetLength(2); z++) { model.data[x + y * file.ModelList[0].GetLength(0) + z * file.ModelList[0].GetLength(0) * file.ModelList[0].GetLength(1)] = file.ModelList[0][x, y, z]; } } } model.SetSize(new Vector3Int(file.ModelList[0].GetLength(0), file.ModelList[0].GetLength(1), file.ModelList[0].GetLength(2))); model.hideFlags = HideFlags.NotEditable; EditorUtility.SetDirty(model); return(model); }