refactor(editor): 将 ResourceKit 的编辑器方法迁移至 EditorKit

This commit is contained in:
2026-03-12 17:45:09 +08:00
parent 622b12aa04
commit 8ad5135949
+79 -3
View File
@@ -1,5 +1,7 @@
using UnityEditor;
using UnityEditor;
using UnityEngine;
using System;
using UnityEditor.U2D.PSD;
namespace AibisDream.SystemEditor
{
@@ -86,11 +88,11 @@ namespace AibisDream.SystemEditor
return SortingLayer.layers[idx].id;
}
public static void RecordObjectAndChildren(GameObject parent, string actionName)
{
Transform[] transforms = parent.GetComponentsInChildren<Transform>(true);
Object[] objectsToUndo = new Object[transforms.Length];
UnityEngine.Object[] objectsToUndo = new UnityEngine.Object[transforms.Length];
for (int i = 0; i < transforms.Length; i++)
{
@@ -99,5 +101,79 @@ namespace AibisDream.SystemEditor
Undo.RegisterCompleteObjectUndo(objectsToUndo, actionName);
}
public static string SaveSprite(Sprite sprite)
{
if (!sprite) return "";
string psdPath = AssetDatabase.GetAssetPath(sprite);
var psdResPath = GetResourcePath(psdPath);
int lastDotIndex = psdResPath.LastIndexOf('.');
if (lastDotIndex == -1)
return psdResPath;
var purePath = psdResPath.Substring(0, lastDotIndex);
return purePath + "/" + sprite.name;
}
private static string GetResourcePath(string absolutePath)
{
const string resourcesFolderName = "Resources/";
var index = absolutePath.IndexOf(resourcesFolderName, StringComparison.Ordinal);
return index >= 0 ? absolutePath[(index + resourcesFolderName.Length)..] : absolutePath;
}
public static bool GetAssetAddressableKey<T>(T asset, out string addressableKey) where T : UnityEngine.Object
{
string path = AssetDatabase.GetAssetPath(asset);
if (asset is Sprite sprite && AssetImporter.GetAtPath(path) is TextureImporter importer)
{
if (importer.textureType == TextureImporterType.Sprite &&
importer.spriteImportMode == SpriteImportMode.Multiple)
{
if (TryGetAddressableKey(path, out var addressableKeyPrefix))
{
addressableKey = $"{addressableKeyPrefix}[{sprite.name}]";
return true;
}
addressableKey = addressableKeyPrefix;
return false;
}
}
else if (asset is Sprite texture && AssetImporter.GetAtPath(path) is PSDImporter)
{
if (TryGetAddressableKey(path, out var addressableKeyPrefix))
{
addressableKey = $"{addressableKeyPrefix}[{texture.name}]";
return true;
}
addressableKey = addressableKeyPrefix;
return false;
}
return TryGetAddressableKey(path, out addressableKey);
}
private static bool TryGetAddressableKey(string path, out string addressableKey)
{
var settings = UnityEditor.AddressableAssets.AddressableAssetSettingsDefaultObject.Settings;
if (settings != null)
{
var entry = settings.FindAssetEntry(AssetDatabase.AssetPathToGUID(path));
if (entry != null)
{
addressableKey = entry.address;
return true;
}
}
Debug.Log($"资源{path}不存在于Addressables中");
addressableKey = path;
return false;
}
}
}