use unity_parser::UnityFile; use std::path::Path; fn main() { // Parse a Unity prefab file let prefab_path = Path::new("data/tests/unity-sampleproject/PiratePanic/Assets/PiratePanic/Prefabs/Menu/Battle/Hand/CardGrabber.prefab"); if !prefab_path.exists() { eprintln!("Error: Unity sample project not found."); eprintln!("Please ensure the git submodule is initialized:"); eprintln!(" git submodule update --init --recursive"); return; } // Parse the file match UnityFile::from_path(prefab_path) { Ok(file) => { println!("Successfully parsed: {:?}", file.path().file_name().unwrap()); // Handle the different file types match file { UnityFile::Prefab(prefab) => { println!("Found {} documents\n", prefab.documents.len()); // List all documents for (i, doc) in prefab.documents.iter().enumerate() { println!("Document {}: {} (Type ID: {}, File ID: {})", i + 1, doc.class_name, doc.type_id, doc.file_id ); } println!(); // Find all GameObjects let game_objects = prefab.get_documents_by_class("GameObject"); println!("Found {} GameObjects:", game_objects.len()); for go in game_objects { // doc.yaml already contains the inner content (after class wrapper) if let Some(mapping) = go.as_mapping() { if let Some(name) = mapping.get("m_Name").and_then(|v| v.as_str()) { println!(" - {}", name); } } } println!(); // Find all Transforms let transforms = prefab.get_documents_by_type(224); // RectTransform type ID println!("Found {} RectTransforms", transforms.len()); // Look up a specific document by file ID if let Some(first_doc) = prefab.documents.first() { let file_id = first_doc.file_id; if let Some(found) = prefab.get_document(file_id) { println!("\nLooking up document by file ID {}:", file_id); println!(" Class: {}", found.class_name); } } } UnityFile::Scene(scene) => { println!("This is a scene file with {} entities", scene.entity_map.len()); } UnityFile::Asset(asset) => { println!("This is an asset file with {} documents", asset.documents.len()); } } } Err(e) => { eprintln!("Error parsing file: {}", e); } } }