123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- using System.IO;
- using UnityEditor;
- using UnityEngine;
- using System.Diagnostics;
- namespace LLM.Editor
- {
- public static class DataExtractorMenu
- {
- private const string HighLevelScript = "Assets/LLM/source/extract_high_level.py";
- private const string MidLevelScript = "Assets/LLM/source/extract_mid_level.py";
- private const string LowLevelScript = "Assets/LLM/source/extract_low_level.py";
- [MenuItem("Tools/DataExtractor/High Level Export")]
- private static void ExportHighLevel()
- {
- RunExtractor("High Level", HighLevelScript);
- }
- [MenuItem("Tools/DataExtractor/Mid Level Export")]
- private static void ExportMidLevel()
- {
- RunExtractor("Mid Level", MidLevelScript);
- }
- [MenuItem("Tools/DataExtractor/Low Level Export")]
- private static void ExportLowLevel()
- {
- RunExtractor("Low Level", LowLevelScript);
- }
- private static void RunExtractor(string level, string scriptPath)
- {
- var outputPath = EditorUtility.OpenFolderPanel($"Select Output Folder for {level} Export", "", "");
- if (string.IsNullOrEmpty(outputPath))
- {
- UnityEngine.Debug.Log($"{level} export cancelled by user.");
- return;
- }
- var projectRoot = Path.GetFullPath(Path.Combine(Application.dataPath, ".."));
- var pythonExecutable = Path.Combine(projectRoot, "venv", "bin", "python3");
- var fullScriptPath = Path.Combine(projectRoot, scriptPath);
- if (!File.Exists(pythonExecutable))
- {
- UnityEngine.Debug.LogError($"Python executable not found at: {pythonExecutable}");
- EditorUtility.DisplayDialog("Export Error", "The Python virtual environment executable was not found. Please ensure the 'venv' directory is set up correctly.", "OK");
- return;
- }
- if (!File.Exists(fullScriptPath))
- {
- UnityEngine.Debug.LogError($"Extractor script not found at: {fullScriptPath}");
- EditorUtility.DisplayDialog("Export Error", $"The Python script for the {level} extractor was not found.", "OK");
- return;
- }
- var arguments = $"\"{fullScriptPath}\" --input \"{projectRoot}\" --output \"{outputPath}\"";
-
- UnityEngine.Debug.Log($"Running command: \"{pythonExecutable}\" {arguments}");
- var process = new Process
- {
- StartInfo = new ProcessStartInfo
- {
- FileName = pythonExecutable,
- Arguments = arguments,
- RedirectStandardOutput = true,
- RedirectStandardError = true,
- UseShellExecute = false,
- CreateNoWindow = true,
- WorkingDirectory = projectRoot
- }
- };
- EditorUtility.DisplayProgressBar("Data Extractor", $"Running {level} export...", 0.5f);
-
- process.OutputDataReceived += (_, e) => { if (e.Data != null) UnityEngine.Debug.Log($"[Extractor] {e.Data}"); };
- process.ErrorDataReceived += (_, e) => { if (e.Data != null) UnityEngine.Debug.LogError($"[Extractor ERROR] {e.Data}"); };
- process.Start();
- process.BeginOutputReadLine();
- process.BeginErrorReadLine();
- process.WaitForExit();
- EditorUtility.ClearProgressBar();
- if (process.ExitCode == 0)
- {
- EditorUtility.DisplayDialog("Export Complete", $"{level} data export finished successfully.", "OK");
- }
- else
- {
- EditorUtility.DisplayDialog("Export Failed", $"The {level} data export failed. Check the Unity Console for error messages.", "OK");
- }
- }
- }
- }
|