升级XR插件版本
This commit is contained in:
62
Packages/MCPForUnity/Editor/Helpers/McpJobStateStore.cs
Normal file
62
Packages/MCPForUnity/Editor/Helpers/McpJobStateStore.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using Newtonsoft.Json;
|
||||
using UnityEngine;
|
||||
|
||||
namespace MCPForUnity.Editor.Helpers
|
||||
{
|
||||
/// <summary>
|
||||
/// Utility for persisting tool state across domain reloads. State is stored in
|
||||
/// Library so it stays local to the project and is cleared by Unity as needed.
|
||||
/// </summary>
|
||||
public static class McpJobStateStore
|
||||
{
|
||||
private static string GetStatePath(string toolName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(toolName))
|
||||
{
|
||||
throw new ArgumentException("toolName cannot be null or empty", nameof(toolName));
|
||||
}
|
||||
|
||||
var libraryPath = Path.Combine(Application.dataPath, "..", "Library");
|
||||
var fileName = $"McpState_{toolName}.json";
|
||||
return Path.GetFullPath(Path.Combine(libraryPath, fileName));
|
||||
}
|
||||
|
||||
public static void SaveState<T>(string toolName, T state)
|
||||
{
|
||||
var path = GetStatePath(toolName);
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(path));
|
||||
var json = JsonConvert.SerializeObject(state ?? Activator.CreateInstance<T>());
|
||||
File.WriteAllText(path, json);
|
||||
}
|
||||
|
||||
public static T LoadState<T>(string toolName)
|
||||
{
|
||||
var path = GetStatePath(toolName);
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
return default;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var json = File.ReadAllText(path);
|
||||
return JsonConvert.DeserializeObject<T>(json);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return default;
|
||||
}
|
||||
}
|
||||
|
||||
public static void ClearState(string toolName)
|
||||
{
|
||||
var path = GetStatePath(toolName);
|
||||
if (File.Exists(path))
|
||||
{
|
||||
File.Delete(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user