diff options
Diffstat (limited to 'exporter/src/bin')
-rw-r--r-- | exporter/src/bin/scenetree.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/exporter/src/bin/scenetree.rs b/exporter/src/bin/scenetree.rs new file mode 100644 index 0000000..66276df --- /dev/null +++ b/exporter/src/bin/scenetree.rs @@ -0,0 +1,29 @@ +use std::{env::args, fs::File, io::BufReader}; +use unity_tools::{assetbundle::AssetBundle, classes::transform::Transform}; + +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, "samples")?; + + println!("digraph {{"); + for ob in bundle.all_toplevel_of_class("Transform") { + let i = ob.path_id; + let tr = ob.load(&mut bundle)?.parse::<Transform>()?; + + let mut name = "(no gameobject)".to_string(); + if !tr.gameobject.is_null() { + let go = tr.gameobject.load(&mut bundle)?; + name = go.name; + } + println!("n{i} [label={name:?}];"); + + if !tr.father.is_null() { + let j = tr.father.path_id; + println!("n{j} -> n{i};") + } + } + println!("}}"); + + Ok(()) +} |