|
@@ -19,6 +19,7 @@ def parse_physics_settings(input_dir, project_mode):
|
|
"""
|
|
"""
|
|
Parses the appropriate physics settings file based on the project mode.
|
|
Parses the appropriate physics settings file based on the project mode.
|
|
"""
|
|
"""
|
|
|
|
+ print(f" -> Analyzing {project_mode} physics settings...")
|
|
physics_data = {}
|
|
physics_data = {}
|
|
if project_mode == "3D":
|
|
if project_mode == "3D":
|
|
asset_path = input_dir / "ProjectSettings" / "DynamicsManager.asset"
|
|
asset_path = input_dir / "ProjectSettings" / "DynamicsManager.asset"
|
|
@@ -32,6 +33,8 @@ def parse_physics_settings(input_dir, project_mode):
|
|
physics_data['layerCollisionMatrix'] = settings.get('m_LayerCollisionMatrix')
|
|
physics_data['layerCollisionMatrix'] = settings.get('m_LayerCollisionMatrix')
|
|
physics_data['autoSimulation'] = settings.get('m_AutoSimulation')
|
|
physics_data['autoSimulation'] = settings.get('m_AutoSimulation')
|
|
physics_data['autoSyncTransforms'] = settings.get('m_AutoSyncTransforms')
|
|
physics_data['autoSyncTransforms'] = settings.get('m_AutoSyncTransforms')
|
|
|
|
+ else:
|
|
|
|
+ print(" ...DynamicsManager.asset not found.")
|
|
else: # 2D
|
|
else: # 2D
|
|
asset_path = input_dir / "ProjectSettings" / "Physics2DSettings.asset"
|
|
asset_path = input_dir / "ProjectSettings" / "Physics2DSettings.asset"
|
|
if asset_path.is_file():
|
|
if asset_path.is_file():
|
|
@@ -44,6 +47,8 @@ def parse_physics_settings(input_dir, project_mode):
|
|
physics_data['layerCollisionMatrix'] = settings.get('m_LayerCollisionMatrix')
|
|
physics_data['layerCollisionMatrix'] = settings.get('m_LayerCollisionMatrix')
|
|
physics_data['autoSimulation'] = settings.get('m_AutoSimulation')
|
|
physics_data['autoSimulation'] = settings.get('m_AutoSimulation')
|
|
physics_data['autoSyncTransforms'] = settings.get('m_AutoSyncTransforms')
|
|
physics_data['autoSyncTransforms'] = settings.get('m_AutoSyncTransforms')
|
|
|
|
+ else:
|
|
|
|
+ print(" ...Physics2DSettings.asset not found.")
|
|
|
|
|
|
return physics_data
|
|
return physics_data
|
|
|
|
|
|
@@ -51,12 +56,13 @@ def parse_project_settings(input_dir, output_dir, indent=None, shrink=False, ign
|
|
"""
|
|
"""
|
|
Parses various project settings files to create a comprehensive manifest.
|
|
Parses various project settings files to create a comprehensive manifest.
|
|
"""
|
|
"""
|
|
- print("\n--- Starting Task 2: Comprehensive Project Settings Parser ---")
|
|
|
|
-
|
|
|
|
manifest_data = {}
|
|
manifest_data = {}
|
|
|
|
+ print("--> Generating GUID to Path map...")
|
|
guid_map = create_guid_to_path_map(str(input_dir), ignored_folders=ignored_folders)
|
|
guid_map = create_guid_to_path_map(str(input_dir), ignored_folders=ignored_folders)
|
|
|
|
+ print(" ...GUID map generated.")
|
|
|
|
|
|
# --- ProjectSettings.asset ---
|
|
# --- ProjectSettings.asset ---
|
|
|
|
+ print("--> Parsing ProjectSettings.asset...")
|
|
project_settings_path = input_dir / "ProjectSettings" / "ProjectSettings.asset"
|
|
project_settings_path = input_dir / "ProjectSettings" / "ProjectSettings.asset"
|
|
if project_settings_path.is_file():
|
|
if project_settings_path.is_file():
|
|
docs = load_unity_yaml(str(project_settings_path))
|
|
docs = load_unity_yaml(str(project_settings_path))
|
|
@@ -127,16 +133,22 @@ def parse_project_settings(input_dir, output_dir, indent=None, shrink=False, ign
|
|
|
|
|
|
manifest_data['scriptingBackend'] = final_scripting_backends
|
|
manifest_data['scriptingBackend'] = final_scripting_backends
|
|
manifest_data['apiCompatibilityLevel'] = final_api_levels
|
|
manifest_data['apiCompatibilityLevel'] = final_api_levels
|
|
|
|
+ else:
|
|
|
|
+ print(" ...ProjectSettings.asset not found.")
|
|
|
|
|
|
# --- EditorSettings.asset for 2D/3D Mode ---
|
|
# --- EditorSettings.asset for 2D/3D Mode ---
|
|
|
|
+ print("--> Parsing EditorSettings.asset...")
|
|
editor_settings_path = input_dir / "ProjectSettings" / "EditorSettings.asset"
|
|
editor_settings_path = input_dir / "ProjectSettings" / "EditorSettings.asset"
|
|
if editor_settings_path.is_file():
|
|
if editor_settings_path.is_file():
|
|
docs = load_unity_yaml(str(editor_settings_path))
|
|
docs = load_unity_yaml(str(editor_settings_path))
|
|
if docs:
|
|
if docs:
|
|
editor_settings = convert_to_plain_python_types(docs[0]).get('EditorSettings', {})
|
|
editor_settings = convert_to_plain_python_types(docs[0]).get('EditorSettings', {})
|
|
manifest_data['projectMode'] = "2D" if editor_settings.get('m_DefaultBehaviorMode') == 1 else "3D"
|
|
manifest_data['projectMode'] = "2D" if editor_settings.get('m_DefaultBehaviorMode') == 1 else "3D"
|
|
|
|
+ else:
|
|
|
|
+ print(" ...EditorSettings.asset not found.")
|
|
|
|
|
|
# --- GraphicsSettings.asset for Render Pipeline ---
|
|
# --- GraphicsSettings.asset for Render Pipeline ---
|
|
|
|
+ print("--> Parsing GraphicsSettings.asset...")
|
|
graphics_settings_path = input_dir / "ProjectSettings" / "GraphicsSettings.asset"
|
|
graphics_settings_path = input_dir / "ProjectSettings" / "GraphicsSettings.asset"
|
|
manifest_data['renderPipeline'] = 'Built-in'
|
|
manifest_data['renderPipeline'] = 'Built-in'
|
|
if graphics_settings_path.is_file():
|
|
if graphics_settings_path.is_file():
|
|
@@ -153,9 +165,12 @@ def parse_project_settings(input_dir, output_dir, indent=None, shrink=False, ign
|
|
if "URP" in asset_path: manifest_data['renderPipeline'] = 'URP'
|
|
if "URP" in asset_path: manifest_data['renderPipeline'] = 'URP'
|
|
elif "HDRP" in asset_path: manifest_data['renderPipeline'] = 'HDRP'
|
|
elif "HDRP" in asset_path: manifest_data['renderPipeline'] = 'HDRP'
|
|
else: manifest_data['renderPipeline'] = 'Scriptable'
|
|
else: manifest_data['renderPipeline'] = 'Scriptable'
|
|
|
|
+ else:
|
|
|
|
+ print(" ...GraphicsSettings.asset not found.")
|
|
|
|
|
|
|
|
|
|
# --- TagManager.asset ---
|
|
# --- TagManager.asset ---
|
|
|
|
+ print("--> Parsing TagManager.asset...")
|
|
tag_manager_path = input_dir / "ProjectSettings" / "TagManager.asset"
|
|
tag_manager_path = input_dir / "ProjectSettings" / "TagManager.asset"
|
|
if tag_manager_path.is_file():
|
|
if tag_manager_path.is_file():
|
|
docs = load_unity_yaml(str(tag_manager_path))
|
|
docs = load_unity_yaml(str(tag_manager_path))
|
|
@@ -165,8 +180,11 @@ def parse_project_settings(input_dir, output_dir, indent=None, shrink=False, ign
|
|
layers_list = tag_manager.get('layers', [])
|
|
layers_list = tag_manager.get('layers', [])
|
|
# Only include layers that have a name, preserving their index
|
|
# Only include layers that have a name, preserving their index
|
|
manifest_data['layers'] = {i: name for i, name in enumerate(layers_list) if name}
|
|
manifest_data['layers'] = {i: name for i, name in enumerate(layers_list) if name}
|
|
|
|
+ else:
|
|
|
|
+ print(" ...TagManager.asset not found.")
|
|
|
|
|
|
# --- EditorBuildSettings.asset ---
|
|
# --- EditorBuildSettings.asset ---
|
|
|
|
+ print("--> Parsing EditorBuildSettings.asset...")
|
|
build_settings_path = input_dir / "ProjectSettings" / "EditorBuildSettings.asset"
|
|
build_settings_path = input_dir / "ProjectSettings" / "EditorBuildSettings.asset"
|
|
if build_settings_path.is_file():
|
|
if build_settings_path.is_file():
|
|
docs = load_unity_yaml(str(build_settings_path))
|
|
docs = load_unity_yaml(str(build_settings_path))
|
|
@@ -176,8 +194,11 @@ def parse_project_settings(input_dir, output_dir, indent=None, shrink=False, ign
|
|
{'path': scene.get('path'), 'enabled': scene.get('enabled') == 1}
|
|
{'path': scene.get('path'), 'enabled': scene.get('enabled') == 1}
|
|
for scene in build_settings.get('m_Scenes', [])
|
|
for scene in build_settings.get('m_Scenes', [])
|
|
]
|
|
]
|
|
|
|
+ else:
|
|
|
|
+ print(" ...EditorBuildSettings.asset not found.")
|
|
|
|
|
|
# --- TimeManager.asset ---
|
|
# --- TimeManager.asset ---
|
|
|
|
+ print("--> Parsing TimeManager.asset...")
|
|
time_manager_path = input_dir / "ProjectSettings" / "TimeManager.asset"
|
|
time_manager_path = input_dir / "ProjectSettings" / "TimeManager.asset"
|
|
if time_manager_path.is_file():
|
|
if time_manager_path.is_file():
|
|
docs = load_unity_yaml(str(time_manager_path))
|
|
docs = load_unity_yaml(str(time_manager_path))
|
|
@@ -190,15 +211,18 @@ def parse_project_settings(input_dir, output_dir, indent=None, shrink=False, ign
|
|
'm_TimeScale': time_manager.get('m_TimeScale'),
|
|
'm_TimeScale': time_manager.get('m_TimeScale'),
|
|
'Maximum Particle Timestep': time_manager.get('Maximum Particle Timestep')
|
|
'Maximum Particle Timestep': time_manager.get('Maximum Particle Timestep')
|
|
}
|
|
}
|
|
|
|
+ else:
|
|
|
|
+ print(" ...TimeManager.asset not found.")
|
|
|
|
|
|
# --- Physics Settings ---
|
|
# --- Physics Settings ---
|
|
|
|
+ print("--> Parsing physics settings...")
|
|
manifest_data['physicsSettings'] = parse_physics_settings(input_dir, manifest_data.get('projectMode', '3D'))
|
|
manifest_data['physicsSettings'] = parse_physics_settings(input_dir, manifest_data.get('projectMode', '3D'))
|
|
|
|
|
|
# --- Write manifest.json ---
|
|
# --- Write manifest.json ---
|
|
manifest_output_path = output_dir / "manifest.json"
|
|
manifest_output_path = output_dir / "manifest.json"
|
|
try:
|
|
try:
|
|
write_json(manifest_data, manifest_output_path, indent=indent, shrink=shrink)
|
|
write_json(manifest_data, manifest_output_path, indent=indent, shrink=shrink)
|
|
- print(f"Successfully created manifest.json at {manifest_output_path}")
|
|
|
|
|
|
+ print(f"--> Successfully created manifest.json at {manifest_output_path}")
|
|
except Exception as e:
|
|
except Exception as e:
|
|
print(f"Error writing to {manifest_output_path}. {e}", file=sys.stderr)
|
|
print(f"Error writing to {manifest_output_path}. {e}", file=sys.stderr)
|
|
|
|
|
|
@@ -207,18 +231,17 @@ def parse_package_manifests(input_dir, output_dir, indent=None, shrink=False):
|
|
"""
|
|
"""
|
|
Parses the primary package manifest and creates a clean packages.json file.
|
|
Parses the primary package manifest and creates a clean packages.json file.
|
|
"""
|
|
"""
|
|
- print("\n--- Starting Task 3: Package Manifest Extractor ---")
|
|
|
|
-
|
|
|
|
manifest_path = input_dir / "Packages" / "manifest.json"
|
|
manifest_path = input_dir / "Packages" / "manifest.json"
|
|
|
|
|
|
if manifest_path.is_file():
|
|
if manifest_path.is_file():
|
|
try:
|
|
try:
|
|
|
|
+ print(f"--> Found package manifest at {manifest_path}")
|
|
with open(manifest_path, 'r', encoding='utf-8') as f:
|
|
with open(manifest_path, 'r', encoding='utf-8') as f:
|
|
packages_data = json.load(f)
|
|
packages_data = json.load(f)
|
|
|
|
|
|
packages_output_path = output_dir / "packages.json"
|
|
packages_output_path = output_dir / "packages.json"
|
|
write_json(packages_data, packages_output_path, indent=indent, shrink=shrink)
|
|
write_json(packages_data, packages_output_path, indent=indent, shrink=shrink)
|
|
- print(f"Successfully created packages.json at {packages_output_path}")
|
|
|
|
|
|
+ print(f"--> Successfully created packages.json at {packages_output_path}")
|
|
|
|
|
|
except (IOError, json.JSONDecodeError) as e:
|
|
except (IOError, json.JSONDecodeError) as e:
|
|
print(f"Error processing {manifest_path}: {e}", file=sys.stderr)
|
|
print(f"Error processing {manifest_path}: {e}", file=sys.stderr)
|
|
@@ -257,17 +280,22 @@ def main():
|
|
print(f"Error: Could not create output directory '{high_level_output_dir}'. {e}", file=sys.stderr)
|
|
print(f"Error: Could not create output directory '{high_level_output_dir}'. {e}", file=sys.stderr)
|
|
sys.exit(1)
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
+ print("\n--- Running High-Level Extraction ---")
|
|
|
|
+
|
|
|
|
+ print("\n[1/2] Parsing project settings...")
|
|
parse_project_settings(
|
|
parse_project_settings(
|
|
- input_dir,
|
|
|
|
- high_level_output_dir,
|
|
|
|
- indent=indent_level,
|
|
|
|
- shrink=shrink_json,
|
|
|
|
|
|
+ input_dir,
|
|
|
|
+ high_level_output_dir,
|
|
|
|
+ indent=indent_level,
|
|
|
|
+ shrink=shrink_json,
|
|
ignored_folders=ignored_folders
|
|
ignored_folders=ignored_folders
|
|
)
|
|
)
|
|
|
|
+
|
|
|
|
+ print("\n[2/2] Parsing package manifests...")
|
|
parse_package_manifests(
|
|
parse_package_manifests(
|
|
- input_dir,
|
|
|
|
- high_level_output_dir,
|
|
|
|
- indent=indent_level,
|
|
|
|
|
|
+ input_dir,
|
|
|
|
+ high_level_output_dir,
|
|
|
|
+ indent=indent_level,
|
|
shrink=shrink_json
|
|
shrink=shrink_json
|
|
)
|
|
)
|
|
|
|
|