GitHub地址
当选中多个资源 查找引用时,有的资源引用不显示,解决方法:
把ReferenceFinderWindow脚本原来的 while(stack.Count > 0) { … if (!memo.ContainsKey(current[0])) { … } } 替换为下面这段。
// 替换原来的 while(stack.Count > 0) { ... } 整段varretryCount=newDictionary<string,int>();while(stack.Count>0){varcurrent=stack.Pop();stringguid=current[0];intcurDepth=int.Parse(current[1]);stringparentGuid=current[2];// CreateTree 会在 memo 里返回已存在的节点或新建一个并加入 memovarchild=CreateTree(guid,refelementCount,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,outAssetViewItemparentItem)){if(parentItem.children==null||!parentItem.children.Contains(child))parentItem.AddChild(child);// 成功挂上,重试计数可清除(若有)if(retryCount.ContainsKey(guid))retryCount.Remove(guid);continue;}else{// 父节点还不存在:重试逻辑(将当前项压回栈,等待父节点被创建)intattempts=0;retryCount.TryGetValue(guid,outattempts);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(降级处理),避免死循环。