| 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) { }    }}
 |