parse_project_settings.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import argparse
  2. import sys
  3. from pathlib import Path
  4. # Add the utils directory to the Python path
  5. utils_path = Path(__file__).parent.parent / 'utils'
  6. sys.path.append(str(utils_path))
  7. from json_utils import write_json
  8. from yaml_utils import load_unity_yaml, convert_to_plain_python_types
  9. def main():
  10. parser = argparse.ArgumentParser(description="Parses key ProjectSettings files into JSON.")
  11. parser.add_argument("--input", type=str, required=True, help="The root directory of the target Unity project.")
  12. parser.add_argument("--output", type=str, required=True, help="The directory where the output will be saved.")
  13. parser.add_argument("--indent", type=int, default=None)
  14. args = parser.parse_args()
  15. input_dir = Path(args.input).resolve()
  16. output_dir = Path(args.output).resolve()
  17. project_settings_dir = input_dir / "ProjectSettings"
  18. output_settings_dir = output_dir / "ProjectSettings"
  19. if not project_settings_dir.is_dir():
  20. print("No ProjectSettings directory found.")
  21. return
  22. files_to_parse = [
  23. "TagManager.asset", "DynamicsManager.asset", "Physics2DSettings.asset",
  24. "EditorBuildSettings.asset", "GraphicsSettings.asset", "QualitySettings.asset",
  25. "InputManager.asset", "ProjectSettings.asset"
  26. ]
  27. print(f"\n--- Starting Project Settings Parsing ---")
  28. found_any = False
  29. for filename in files_to_parse:
  30. file_path = project_settings_dir / filename
  31. if not file_path.is_file():
  32. continue
  33. found_any = True
  34. print(f"Processing: {filename}")
  35. output_path = (output_settings_dir / filename).with_suffix('.json')
  36. output_path.parent.mkdir(parents=True, exist_ok=True)
  37. try:
  38. documents = load_unity_yaml(file_path)
  39. if documents:
  40. # Most settings files have one document, export it directly
  41. data = convert_to_plain_python_types(documents[0])
  42. write_json(data, output_path, indent=args.indent)
  43. except Exception as e:
  44. print(f"Error processing {filename}: {e}", file=sys.stderr)
  45. if not found_any:
  46. print("No project settings files found to parse.")
  47. else:
  48. print("Project settings parsing complete.")
  49. if __name__ == "__main__":
  50. main()