12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import argparse
- import sys
- import json
- from pathlib import Path
- # Add the utils directory to the Python path
- utils_path = Path(__file__).parent / 'utils'
- sys.path.append(str(utils_path))
- from file_utils import find_files_by_extension
- from deep_parser import parse_scene_or_prefab
- def main():
- """
- Main function to run the low-level data extraction process.
- """
- parser = argparse.ArgumentParser(
- description="Generates a deeply detailed, per-GameObject breakdown of scenes and prefabs."
- )
- parser.add_argument(
- "--input",
- type=str,
- required=True,
- help="The root directory of the target Unity project."
- )
- parser.add_argument(
- "--output",
- type=str,
- required=True,
- help="The directory where the generated output folder will be saved."
- )
- args = parser.parse_args()
- input_dir = Path(args.input).resolve()
- output_dir = Path(args.output).resolve()
- if not input_dir.is_dir():
- print(f"Error: Input path '{input_dir}' is not a valid directory.", file=sys.stderr)
- sys.exit(1)
- # Create the main output folder, named "LowLevel"
- low_level_output_dir = output_dir / "LowLevel"
- try:
- low_level_output_dir.mkdir(parents=True, exist_ok=True)
- print(f"Output will be saved to: {low_level_output_dir}")
- except OSError as e:
- print(f"Error: Could not create output directory '{low_level_output_dir}'. {e}", file=sys.stderr)
- sys.exit(1)
- # --- Orchestration ---
- assets_dir = input_dir / "Assets"
- if not assets_dir.is_dir():
- print(f"Error: 'Assets' directory not found in '{input_dir}'.", file=sys.stderr)
- return
- scene_files = find_files_by_extension(str(assets_dir), '.unity')
- prefab_files = find_files_by_extension(str(assets_dir), '.prefab')
- files_to_process = scene_files + prefab_files
-
- print(f"\nFound {len(files_to_process)} scene/prefab files to process.")
- for file_path_str in files_to_process:
- file_path = Path(file_path_str)
- print(f"\nProcessing: {file_path.name}")
- gameobject_list = parse_scene_or_prefab(str(file_path))
- if gameobject_list:
- # Create the output subdirectory for this asset
- relative_path = file_path.relative_to(input_dir)
- asset_output_dir = low_level_output_dir / relative_path
- try:
- asset_output_dir.mkdir(parents=True, exist_ok=True)
- except OSError as e:
- print(f"Error creating directory {asset_output_dir}: {e}", file=sys.stderr)
- continue
- print(f"Saving {len(gameobject_list)} GameObjects to {asset_output_dir}")
- for go_data in gameobject_list:
- file_id = go_data.get('fileID')
- if file_id:
- output_json_path = asset_output_dir / f"{file_id}.json"
- try:
- with open(output_json_path, 'w', encoding='utf-8') as f:
- json.dump(go_data, f, indent=4)
- except IOError as e:
- print(f"Error writing to {output_json_path}: {e}", file=sys.stderr)
- else:
- print(f"Skipped {file_path.name} as deep parsing failed.")
- print("\nLow-level extraction complete.")
- if __name__ == "__main__":
- main()
|