【整合】 框架使用规则
This commit is contained in:
@@ -1,176 +0,0 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using System.IO;
|
||||
|
||||
[InitializeOnLoad]
|
||||
public static class ExternalCommandListener
|
||||
{
|
||||
private static FileSystemWatcher watcher;
|
||||
private static string triggerFilePath;
|
||||
private static bool isInitialized = false;
|
||||
|
||||
static ExternalCommandListener()
|
||||
{
|
||||
EditorApplication.update += InitializeOnFirstUpdate;
|
||||
}
|
||||
|
||||
private static void InitializeOnFirstUpdate()
|
||||
{
|
||||
if (!isInitialized)
|
||||
{
|
||||
isInitialized = true;
|
||||
EditorApplication.update -= InitializeOnFirstUpdate;
|
||||
SetupFileWatcher();
|
||||
Debug.Log("ExternalCommandListener started");
|
||||
}
|
||||
}
|
||||
|
||||
private static void SetupFileWatcher()
|
||||
{
|
||||
triggerFilePath = Path.Combine(Application.dataPath, "..", "Trigger_Command.txt");
|
||||
string watchFolder = Path.GetDirectoryName(triggerFilePath);
|
||||
|
||||
if (watcher != null) watcher.Dispose();
|
||||
|
||||
watcher = new FileSystemWatcher(watchFolder, "Trigger_Command.txt");
|
||||
watcher.NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.LastWrite;
|
||||
watcher.Created += OnFileChanged;
|
||||
watcher.Changed += OnFileChanged;
|
||||
watcher.EnableRaisingEvents = true;
|
||||
}
|
||||
|
||||
private static void OnFileChanged(object sender, FileSystemEventArgs e)
|
||||
{
|
||||
if (e.ChangeType != WatcherChangeTypes.Created && e.ChangeType != WatcherChangeTypes.Changed)
|
||||
return;
|
||||
|
||||
EditorApplication.delayCall += ExecuteCommandFromFile;
|
||||
}
|
||||
|
||||
private static void ExecuteCommandFromFile()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!File.Exists(triggerFilePath)) return;
|
||||
|
||||
string content = File.ReadAllText(triggerFilePath).Trim();
|
||||
File.Delete(triggerFilePath);
|
||||
|
||||
ParseAndExecute(content);
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Debug.LogError("Execute failed: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private static void ParseAndExecute(string content)
|
||||
{
|
||||
content = content.Trim().Trim('"', '\'');
|
||||
|
||||
string[] parts = content.Split(':');
|
||||
if (parts.Length == 0) return;
|
||||
|
||||
string command = parts[0].Trim();
|
||||
string[] args = parts.Length > 1 ? parts[1..] : new string[0];
|
||||
|
||||
ExecuteCommand(command, args);
|
||||
}
|
||||
|
||||
private static void ExecuteCommand(string command, string[] args)
|
||||
{
|
||||
switch (command)
|
||||
{
|
||||
case "ReadJson":
|
||||
ExecuteReadJson(args);
|
||||
break;
|
||||
case "GenerateUIPrefab":
|
||||
ExecuteGenerateUIPrefab(args);
|
||||
break;
|
||||
case "ExportPrefabToJson":
|
||||
ExecuteExportPrefabToJson(args);
|
||||
break;
|
||||
default:
|
||||
Debug.LogWarning("Unknown command: " + command);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void ExecuteReadJson(string[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
var method = typeof(RemoteCommand).GetMethod("ReadJson",
|
||||
System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static,
|
||||
null,
|
||||
new[] { typeof(string[]) },
|
||||
null);
|
||||
|
||||
if (method != null)
|
||||
{
|
||||
method.Invoke(null, new object[] { args });
|
||||
Debug.Log("Executed: ReadJson(" + string.Join(", ", args) + ")");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("RemoteCommand.ReadJson not found");
|
||||
}
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Debug.LogError("ReadJson failed: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private static void ExecuteGenerateUIPrefab(string[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
var method = typeof(RemoteCommand).GetMethod("GenerateUIPrefab",
|
||||
System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static,
|
||||
null,
|
||||
new[] { typeof(string[]) },
|
||||
null);
|
||||
|
||||
if (method != null)
|
||||
{
|
||||
method.Invoke(null, new object[] { args });
|
||||
Debug.Log("Executed: GenerateUIPrefab(" + string.Join(", ", args) + ")");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("RemoteCommand.GenerateUIPrefab not found");
|
||||
}
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Debug.LogError("GenerateUIPrefab failed: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private static void ExecuteExportPrefabToJson(string[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
var method = typeof(RemoteCommand).GetMethod("ExportPrefabToJson",
|
||||
System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static,
|
||||
null,
|
||||
new[] { typeof(string[]) },
|
||||
null);
|
||||
|
||||
if (method != null)
|
||||
{
|
||||
method.Invoke(null, new object[] { args });
|
||||
Debug.Log("Executed: ExportPrefabToJson(" + string.Join(", ", args) + ")");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("RemoteCommand.ExportPrefabToJson not found");
|
||||
}
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Debug.LogError("ExportPrefabToJson failed: " + ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 93f1f8f942aa53347a7e58bb4c561893
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,39 +0,0 @@
|
||||
public static class RemoteCommand
|
||||
{
|
||||
public static void ReadJson(string[] args)
|
||||
{
|
||||
SFP.Error("收到参数: " + string.Join(", ", args));
|
||||
}
|
||||
|
||||
public static void GenerateUIPrefab(string[] args)
|
||||
{
|
||||
if (args.Length == 0)
|
||||
{
|
||||
SFP.Error("GenerateUIPrefab: 需要提供JSON文件路径参数");
|
||||
return;
|
||||
}
|
||||
|
||||
string jsonPath = args[0];
|
||||
string prefabPath = args.Length > 1 ? args[1] : null;
|
||||
|
||||
SFP.Error("GenerateUIPrefab: 开始生成UI, JSON路径: " + jsonPath);
|
||||
|
||||
UIPrefabGenerator.GeneratePrefabFromJson(jsonPath, prefabPath);
|
||||
}
|
||||
|
||||
public static void ExportPrefabToJson(string[] args)
|
||||
{
|
||||
if (args.Length == 0)
|
||||
{
|
||||
SFP.Error("ExportPrefabToJson: 需要提供预制体文件路径参数");
|
||||
return;
|
||||
}
|
||||
|
||||
string prefabPath = args[0];
|
||||
string jsonPath = args.Length > 1 ? args[1] : null;
|
||||
|
||||
SFP.Error("ExportPrefabToJson: 开始导出JSON, 预制体路径: " + prefabPath);
|
||||
|
||||
UIPrefabToJson.ExportPrefabToJson(prefabPath, jsonPath);
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 359ded64689f3f64c87c561d88cead9d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user