123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- using XGame.Editor.Asset.Addressable;
- using XGame.Framework.Asset;
- using XGame.Framework.Asset.Addressable;
- using XGame.Framework.Asset.Addressable.Data;
- using System.IO;
- using UnityEditor;
- using UnityEngine;
- namespace XGame.Editor.Asset
- {
- public class SingleAddressableAssetWindow : EditorWindow
- {
- [MenuItem("Assets/AddressableName", priority = 99)]
- private static void CreateWindow()
- {
- var activeObject = Selection.activeObject;
- var assetPath = AssetDatabase.GetAssetPath(activeObject);
- if (!AddressableHelper.TryAssetPathToClassify(assetPath, out var classify))
- {
- return;
- }
- //检查选中的资源是否有配置记录
- var manifest = AddressableHelper.LoadAssetManifest(classify);
- if (manifest == null)
- {
- Debug.LogError($"Can't find manifest file. Path: {PathDefine.ProductAssetManifestPath}");
- return;
- }
- var assetInfos = manifest.GetAssetInfos();
- var guid = AssetDatabase.AssetPathToGUID(assetPath);
- var index = assetInfos.FindIndex((info => info.assetGUID.Equals(guid)));
- if (index < 0)
- {
- Debug.LogError($"Can't find AddressableAssetInfo. Please select a valid object. Path:{assetPath} File:{Path.GetFileNameWithoutExtension(assetPath)}");
- return;
- }
- var window = EditorWindow.GetWindow<SingleAddressableAssetWindow>(true, "AddressableNameEditor");
- window.Show();
- window.Init(manifest, classify, assetInfos[index]);
- }
- [MenuItem("Assets/AddressableName", true, priority = 99)]
- private static bool VerifyCreateWindow()
- {
- var path = AssetDatabase.GetAssetPath(Selection.activeObject);
- if (string.IsNullOrEmpty(path) || Directory.Exists(path))
- {
- return false;
- }
- return (!FileUtil.IsFileIgnore(path) && AddressableHelper.IsValidPath(path));
- }
- private AddressableAssetFile assetFile;
- private AddressableInfosSo manifest;
- private AddressableClassify classifyOperation;
- private void Init(AddressableInfosSo manifest, AddressableClassify classify, AssetInfo assetInfo)
- {
- var assetPath = AssetDatabase.GetAssetPath(Selection.activeObject);
- //if (!AddressableHelper.TryAssetPathToClassify(assetPath, out var classify))
- //{
- // return;
- //}
- this.manifest = manifest;
- classifyOperation = classify;
- //var assetInfos = manifest.GetAssetInfos();
- //var guid = AssetDatabase.AssetPathToGUID(assetPath);
- //var index = assetInfos.FindIndex((info => info.assetGUID.Equals(guid)));
- assetFile?.Clear();
- assetFile = new AddressableAssetFile(assetPath, assetInfo)
- {
- IsFoldout = true
- };
- assetFile.OnApply += OnApplyFile;
- }
- //private void OnEnable()
- //{
- //}
- private void OnDisable()
- {
- assetFile?.Clear();
- manifest = null;
- }
- private void OnGUI()
- {
- assetFile?.GUI();
- }
- private bool OnApplyFile(ApplyEvnetContext context)
- {
- if (classifyOperation == AddressableClassify.BuiltIn)
- {
- Alert("内置资源禁止修改AddressableName.");
- return false;
- }
- if (classifyOperation == AddressableClassify.Backup)
- {
- Alert("禁止修改备份文件.");
- return false;
- }
- return AddressableHelper.TryApplyAddressableName(manifest, context.assetGUID, context.addressableName);
- //return manifest?.TryApplyAddressableName(guid, addressableName) ?? false;
- }
- private void Alert(string content)
- {
- EditorWindow.focusedWindow.ShowNotification(new GUIContent(content));
- }
- }
- }
|