refactor(editor): 将 ResourceKit 的编辑器方法迁移至 EditorKit
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user