当前位置:网站首页>Unity 获取一个资源被那些资源引用
Unity 获取一个资源被那些资源引用
2022-04-23 06:28:00 【[奋斗不止]】
Unity 获取一个资源被那些资源引用
在 API 只知道了一个资源依赖其他资源的方法 AssetDatabase.GetDependencies
当删除一个资源时往往害怕它被其他资源引用,导致错误,往往需要找到具体哪些文件引用了该资源,Unity 没有提供方法,可以通过 AssetDatabase.GetDependencies 收集项目中所有资源的引用关系,比如项目中资源
A 引用了 D, B 引用了 C,
则 反向查找可以确定 D 被 A 引用了, C 被 B 引用了
在 Editor文件夹中新建脚本 AssetBeDepend.cs
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class AssetBeDepend
{
// 存储所有依赖关系
private static Dictionary<string, List<string>> referenceCacheDic = new Dictionary<string, List<string>>();
// 在 Assets 文件件下鼠标右键弹板中添加按钮 AssetBeDepend
[MenuItem("Assets/AssetBeDepend")]
static void Select()
{
CollectDepend();
// 获取所有选中 文件、文件夹的 GUID
string[] guids = Selection.assetGUIDs;
foreach (var guid in guids)
{
// 将 GUID 转换为 路径
string assetPath = AssetDatabase.GUIDToAssetPath(guid);
IsBeDepend(assetPath);
}
}
// 收集项目中所有依赖关系
static void CollectDepend()
{
int count = 0;
// 获取 Assets 文件夹下所有资源
string[] guids = AssetDatabase.FindAssets("");
foreach (string guid in guids)
{
// 将 GUID 转换为路径
string assetPath = AssetDatabase.GUIDToAssetPath(guid);
// 获取文件所有直接依赖的资源
string[] dependencies = AssetDatabase.GetDependencies(assetPath, false);
foreach (var filePath in dependencies)
{
// dependency 被 assetPath 依赖了
// 将所有依赖关系存储到字典中
List<string> list = null;
if (!referenceCacheDic.TryGetValue(filePath, out list))
{
list = new List<string>();
referenceCacheDic[filePath] = list;
}
list.Add(assetPath);
}
count++;
EditorUtility.DisplayProgressBar("Search Dependencies", "Dependencies", (float)(count * 1.0f / guids.Length));
}
EditorUtility.ClearProgressBar();
}
// 判断文件是否被依赖
static bool IsBeDepend(string filePath)
{
List<string> list = null;
if (!referenceCacheDic.TryGetValue(filePath, out list))
{
return false;
}
// 将依赖关系打印出来
foreach(var file in list)
{
Debug.LogError(filePath + " 被:" + file + " 引用");
}
return true;
}
}
代码中注释比较详细了,不在详解代码
测试方法:在 Assets 文件夹下选中一个、多个文件,鼠标右键,在弹出面板中点击 AssetBeDepend 按钮
版权声明
本文为[[奋斗不止]]所创,转载请带上原文链接,感谢
https://blog.csdn.net/LIQIANGEASTSUN/article/details/124324022
边栏推荐
猜你喜欢

Robust and Efficient Quadrotor Trajectory Generation for Fast Autonomous Flight

FUEL: Fast UAV Exploration using Incremental Frontier Structure and Hierarchical Planning

Ogldev reading notes

SAP PI/PO rfc2RESTful 发布rfc接口为RESTful示例(Proxy间接法)

Use of command line parameter passing library argparse

基于NLP的软件安全研究(一)

Page dynamic display time (upgraded version)

Simple random roll call lottery (written under JS)

Mongodb 启动警告信息处理

Online Safe Trajectory Generation For Quadrotors Using Fast Marching Method and Bernstein Basis Poly
随机推荐
electron-builder打包报错:proxyconnect tcp: dial tcp :0: connectex
反转链表练习
Methods of database query optimization
防抖和节流
快排的练习
3. Sort statement
Two threads print odd and even numbers interactively
NPM installation stepping pit
unity 屏幕自适应
Window10版MySQL设置远程访问权限后不起效果
根据某一指定的表名、列名及列值来向前或向后N条查相关列值的SQL自定义标量值函数
SAP PI/PO登录使用及基本功能简介
ES6使用递归实现深拷贝
new的实现
Simple random roll call lottery (written under JS)
Judge whether the beginning and end of the string contain target parameters: startswith() and endswith() methods
自己封装unity的Debug函数
SAP pi / PO rfc2soap publishes RFC interface as WS example
命令行参数传递库argparse的使用
TimelineWindow