Files
WordConnect/Assets/WordConnectGameToolkit/Editor/SentisToInferenceEngineMigrator.cs
2025-10-17 10:59:23 +08:00

106 lines
3.9 KiB
C#

using UnityEngine;
using UnityEditor;
using System.IO;
namespace WordsToolkit.Editor
{
[InitializeOnLoad]
public static class SentisToInferenceEngineMigrator
{
private const string MIGRATION_KEY = "SentisToInferenceEngineMigrated";
static SentisToInferenceEngineMigrator()
{
if (!SessionState.GetBool(MIGRATION_KEY, false))
{
EditorApplication.delayCall += PerformMigration;
}
}
private static void PerformMigration()
{
bool migrationPerformed = false;
// Force remove any Sentis references from PackageCache
string packageCachePath = Path.Combine(Application.dataPath, "..", "Library", "PackageCache");
if (Directory.Exists(packageCachePath))
{
var sentisDirectories = Directory.GetDirectories(packageCachePath, "com.unity.sentis*");
foreach (var dir in sentisDirectories)
{
try
{
Directory.Delete(dir, true);
Debug.Log($"Removed Sentis package cache: {dir}");
migrationPerformed = true;
}
catch (System.Exception e)
{
Debug.LogWarning($"Could not remove Sentis cache directory {dir}: {e.Message}");
}
}
}
// Clean up any remaining Sentis meta files
CleanupMetaFiles();
if (migrationPerformed)
{
Debug.Log("Sentis to Inference Engine migration completed automatically. Restarting Unity...");
AssetDatabase.Refresh();
// Restart Unity to ensure clean state
EditorApplication.delayCall += () => {
EditorApplication.OpenProject(System.IO.Path.GetDirectoryName(Application.dataPath));
};
}
SessionState.SetBool(MIGRATION_KEY, true);
}
private static void ForceMigrationAndRestart()
{
SessionState.SetBool(MIGRATION_KEY, false);
PerformMigration();
}
private static void RestartUnity()
{
Debug.Log("Restarting Unity...");
EditorApplication.OpenProject(System.IO.Path.GetDirectoryName(Application.dataPath));
}
private static void CleanupMetaFiles()
{
string[] searchPaths = {
Path.Combine(Application.dataPath, "Scripts"),
Path.Combine(Application.dataPath, "WordConnectGameToolkit")
};
foreach (string searchPath in searchPaths)
{
if (Directory.Exists(searchPath))
{
var metaFiles = Directory.GetFiles(searchPath, "*.meta", SearchOption.AllDirectories);
foreach (var metaFile in metaFiles)
{
string content = File.ReadAllText(metaFile);
if (content.Contains("com.unity.sentis"))
{
try
{
content = content.Replace("com.unity.sentis", "com.unity.ai.inference");
File.WriteAllText(metaFile, content);
Debug.Log($"Updated meta file: {metaFile}");
}
catch (System.Exception e)
{
Debug.LogWarning($"Could not update meta file {metaFile}: {e.Message}");
}
}
}
}
}
}
}
}