12345678910111213141516171819202122232425262728293031323334353637383940 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using UnityEditor;
- using UnityEngine;
- namespace net.shutosg.UniEaseCopy
- {
- public class DirectoryAnchor : ScriptableObject
- {
- private static readonly Dictionary<string, string> Cache = new Dictionary<string, string>();
- [SerializeField] private string id;
- public static string Find(string id)
- {
- if (Cache.TryGetValue(id, out var path)) return path;
- var targetAnchorInfos = AssetDatabase.FindAssets($"t:{nameof(DirectoryAnchor)}")
- .Select(AssetDatabase.GUIDToAssetPath)
- .Select(p => (path: p, anchor: AssetDatabase.LoadAssetAtPath<DirectoryAnchor>(p)))
- .Where(x => x.anchor.id == id).ToList();
- if (targetAnchorInfos.Count > 1) throw new MultipleDirectoryAnchorException($"idが '{id}' の {nameof(DirectoryAnchor)} が複数存在します");
- if (targetAnchorInfos.Count == 0) throw new DirectoryAnchorNotFoundException($"idが '{id}' の {nameof(DirectoryAnchor)} が存在しません");
- var targetAnchorPath = targetAnchorInfos[0].path;
- var pathWithoutFileName = targetAnchorPath.Replace(Path.GetFileName(targetAnchorPath), "");
- Cache.Add(id, pathWithoutFileName);
- return pathWithoutFileName;
- }
- }
- public class MultipleDirectoryAnchorException : Exception
- {
- public MultipleDirectoryAnchorException(string message) : base(message) { }
- }
- public class DirectoryAnchorNotFoundException : Exception
- {
- public DirectoryAnchorNotFoundException(string message) : base(message) { }
- }
- }
|