示例#1
0
        public static bool IgnoredPaths(string path, out string str)
        {
            var conf = Globals <Config> .Value;

            foreach (var substr in conf.IgnorePathContains)
            {
                Asr.IsNotNull(path);
                Asr.IsNotNull(substr);
                if (!path.Contains(substr))
                {
                    continue;
                }
                str = substr;
                return(true);
            }

            str = default;
            return(false);
        }
示例#2
0
        public static void Init(SearchArg arg, Object target, Scene scene = default)
        {
            Asr.IsNotNull(target, "Asset you're trying to search is corrupted");

            arg.Target = target;

            arg.FilePath = AssetDatabase.GetAssetPath(arg.Target);
            if (!scene.IsValid())
            {
                Upd(arg);

                arg.Main = AssetDatabase.LoadMainAssetAtPath(arg.FilePath);
                if (AssetDatabase.IsSubAsset(arg.Target))
                {
                }
                else
                {
                    switch (target)
                    {
                    case SceneAsset _:
                        // todo support cross-scene references?
                        // nested = all assets
                        break;

                    default:
                        // AssetDatabase.IsMainAssetAtPathLoaded()
                        var subAssets = AssetDatabase.LoadAllAssetsAtPath(arg.FilePath).Where(Predicate).ToArray();
                        arg.SubAssets = subAssets.Length == 0 ? default(Option <Object[]>) : subAssets;

                        bool Predicate(Object s)
                        {
                            if (!s)
                            {
                                return(false);
                            }
                            return(s.GetInstanceID() != arg.Target.GetInstanceID());
                        }

                        break;
                    }
                }
            }
            else
            {
                switch (arg.Target)
                {
                case GameObject gg:
                    arg.Main      = gg;
                    arg.Scene     = scene;
                    arg.SubAssets = gg.GetComponents <Component>().OfType <Object>().ToArray();
                    break;

                case Component component: {
                    // treat like subAsset
                    arg.Main  = component.gameObject;
                    arg.Scene = scene;
                    break;
                }

                default:
                    // project asset such as Material
                    arg.Main  = arg.Target;
                    arg.Scene = scene;
                    break;
                }
            }
        }