Unity ReferenceFinder插件 多选资源查找bug解决

GitHub地址


当选中多个资源 查找引用时,有的资源引用不显示,解决方法:

ReferenceFinderWindow脚本原来的 while(stack.Count > 0) { ... if (!memo.ContainsKey(current0)) { ... } } 替换为下面这段。

csharp 复制代码
// 替换原来的 while(stack.Count > 0) { ... } 整段
var retryCount = new Dictionary<string, int>();
while (stack.Count > 0)
{
    var current = stack.Pop();
    string guid = current[0];
    int curDepth = int.Parse(current[1]);
    string parentGuid = current[2];

    // CreateTree 会在 memo 里返回已存在的节点或新建一个并加入 memo
    var child = CreateTree(guid, ref elementCount, curDepth, stack, memo);
    if (child == null)
        continue;

    if (string.IsNullOrEmpty(parentGuid))
    {
        // 直接挂到根(避免重复)
        if (root.children == null || !root.children.Contains(child))
            root.AddChild(child);
        continue;
    }

    // 父节点已存在,则直接挂上去(避免重复)
    if (memo.TryGetValue(parentGuid, out AssetViewItem parentItem))
    {
        if (parentItem.children == null || !parentItem.children.Contains(child))
            parentItem.AddChild(child);
        // 成功挂上,重试计数可清除(若有)
        if (retryCount.ContainsKey(guid)) retryCount.Remove(guid);
        continue;
    }
    else
    {
        // 父节点还不存在:重试逻辑(将当前项压回栈,等待父节点被创建)
        int attempts = 0;
        retryCount.TryGetValue(guid, out attempts);
        attempts++;
        retryCount[guid] = attempts;

        if (attempts <= 4) // 重试上限(可调整)
        {
            stack.Push(current); // 稍后再试一次
        }
        else
        {
            // 父节点长时间未出现 -> 降级把它挂到 root,避免死循环
            if (root.children == null || !root.children.Contains(child))
                root.AddChild(child);
            retryCount.Remove(guid);
            Debug.LogWarning($"ReferenceFinder: parent {parentGuid} for {guid} not found after retries, attached to root.");
        }
    }
}

思路:

不再在外面直接跳过 memo 已有项;改为 总是拿到节点(CreateTree 自身会返回已存在的 memo 项),然后尝试把它挂到当前父节点上(如果父节点还没创建则把当前项压回栈并记录重试次数,避免无限循环)。

加了个 retryCount 字典:若某节点连续多次尝试仍然找不到父节点,则把它挂到 root(降级处理),避免死循环。

相关推荐
goujunwe2 小时前
GEO 评估方法:如何自测你的内容,会不会被 AI 引用
搜索引擎·网络安全·游戏引擎·全文检索·中文分词
林川~0110 小时前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
yi碗汤园18 小时前
MQTT消息队列遥测传输协议
网络·网络协议·unity
林川~011 天前
Unity 常用 API 与核心类全解:从生命周期到协程,附性能避坑清单(Unity 6 适配)
unity·游戏引擎·常用api
sensen_kiss1 天前
CPT306 Coursework 1 个人游戏作业——坦克大战
unity·游戏程序·游戏策划
蒸鱼Yuzheng1 天前
Unity 与 Unreal 测试工具怎么回答:Profiler、日志、自动化与证据链
测试工具·unity·性能分析·游戏测试·unrealengine
野区捕龙为宠1 天前
Unity WebGL平台 通过 URL 加载图片(UGUI RawImage / 模型材质)
unity·团结引擎
Keven_112 天前
Bug:UVA816
bug
Keven_112 天前
Bug:UVA1103
bug
阿松爱学习2 天前
【Unity开发】FileStream 详解及用法指南
unity·c#·unity开发