#![feature(array_chunks)] use glam::Vec3; use std::{ env::args, fs::{File, create_dir_all}, io::{BufReader, BufWriter, Write}, }; use unity_tools::{ assetbundle::AssetBundle, classes::mesh::{Mesh, VertexDataChannel}, }; fn main() -> anyhow::Result<()> { env_logger::init_from_env("LOG"); let file = BufReader::new(File::open(args().nth(1).unwrap()).unwrap()); let mut bundle = AssetBundle::open(file)?; let mut i = 0; create_dir_all("/tmp/a").unwrap(); for ob in bundle.all_toplevel_of_class("Mesh").collect::>() { let mesh = ob.load(&mut bundle)?.parse::()?; let mut obj = BufWriter::new(File::create(format!( "/tmp/a/{}_{i}.obj", mesh.name.replace("/", "-").replace(".", "-") ))?); let positions = mesh .vertex_data .read_channel_vec::(VertexDataChannel::Position, false)? .unwrap(); for Vec3 { x, y, z } in positions { writeln!(obj, "v {x} {y} {z}")?; } for [a, b, c] in mesh.read_indecies() { writeln!(obj, "f {} {} {}", a + 1, b + 1, c + 1)?; } i += 1; } Ok(()) }