网站内页全是404,冠县网站建设是什么,绵阳做公司网站,十大成功网络营销案例目录
1.功能概述
2.完整代码
3. 实现原理
4. 使用预览
5.新增优化版本 在Unity项目开发过程中#xff0c;管理和维护资源之间的引用关系是至关重要的。当然我们项目也是需要这个功能 毕竟项目大了之后查找资源引用还是交给 资源引用查找器 比较好。
1.功能概述
资源引用…目录
1.功能概述
2.完整代码
3. 实现原理
4. 使用预览
5.新增优化版本 在Unity项目开发过程中管理和维护资源之间的引用关系是至关重要的。当然我们项目也是需要这个功能 毕竟项目大了之后查找资源引用还是交给 资源引用查找器 比较好。
1.功能概述
资源引用查找器允许开发者选择一个目标资源并在整个项目中查找引用了该资源的其他资源。其主要功能包括
在Unity编辑器菜单栏下添加一个名为Resource Reference Finder的菜单项。提供一个可调整大小的窗口用于选择目标资源和显示引用结果。通过点击Search按钮来触发搜索过程查找所有引用了目标资源的Prefab文件并将结果展示在窗口中。
2.完整代码
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System.IO;public class ResourceReferenceFinder : EditorWindow
{[MenuItem(Assets/Resource Reference Finder)]static void SearchReference(){GetWindowResourceReferenceFinder(Resource Reference Finder);}private static Object targetResource;private ListObject referencingAssets new ListObject();private Vector2 scrollPosition;private void OnGUI(){// 显示资源选择字段和搜索按钮EditorGUILayout.BeginHorizontal();GUILayout.Label(Select Target Resource:, GUILayout.Width(150));targetResource EditorGUILayout.ObjectField(targetResource, typeof(Object), true, GUILayout.Width(200));if (GUILayout.Button(Search, GUILayout.Width(100))){ReferenceFinder();}EditorGUILayout.EndHorizontal();// 滚动视图开始scrollPosition EditorGUILayout.BeginScrollView(scrollPosition);EditorGUILayout.BeginVertical();// 显示搜索结果for (int i 0; i referencingAssets.Count; i){EditorGUILayout.ObjectField(referencingAssets[i], typeof(Object), true, GUILayout.Width(300));}EditorGUILayout.EndVertical();EditorGUILayout.EndScrollView();// 滚动视图结束}// 查找引用private void ReferenceFinder(){referencingAssets.Clear();// 检查是否选择了资源if (targetResource null){Debug.LogWarning(Please select a resource to search for references.);return;}// 获取选择资源的 GUIDstring assetPath AssetDatabase.GetAssetPath(targetResource);string assetGuid AssetDatabase.AssetPathToGUID(assetPath);// 遍历项目中所有 Prefab 文件string[] guids AssetDatabase.FindAssets(t:Prefab, new[] { Assets });int length guids.Length;for (int i 0; i length; i){string filePath AssetDatabase.GUIDToAssetPath(guids[i]);EditorUtility.DisplayCancelableProgressBar(Checking, filePath, (float)i / length);// 读取 Prefab 文件内容检查是否包含选择资源的 GUIDstring content File.ReadAllText(filePath);if (content.Contains(assetGuid)){// 如果包含将该 Prefab 添加到结果列表中Object referencingAsset AssetDatabase.LoadAssetAtPath(filePath, typeof(Object));referencingAssets.Add(referencingAsset);}}// 清除进度条EditorUtility.ClearProgressBar();}
}3. 实现原理
使用Unity编辑器提供的MenuItem特性在菜单栏下添加了一个自定义的菜单项用于触发资源引用查找器窗口的显示。创建了一个继承自EditorWindow的窗口类实现了GUI绘制和资源引用搜索的逻辑。在GUI中通过ObjectField和Button控件实现了目标资源的选择和搜索按钮的功能。使用AssetDatabase类来访问项目中的资源并通过FindAssets方法查找所有Prefab文件。读取Prefab文件的内容检查是否包含目标资源的GUID如果是则将该Prefab添加到引用结果列表中。
4. 使用预览
查找Prefab引用 查找图片引用 5.新增优化版本
新增优化版本右键直接选中需要查找的资源 直接省略繁琐步骤 完整代码如下
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System.IO;public class ResourceReferenceFinder : EditorWindow
{private ListObject referencingAssets new ListObject();private Vector2 scrollPosition;[MenuItem(Assets/ZYT ASSETS/Find References, true)]private static bool ValidateSearchReference(){// 只在选中了对象且不是文件夹时才显示菜单项return Selection.activeObject ! null !AssetDatabase.IsValidFolder(AssetDatabase.GetAssetPath(Selection.activeObject));}[MenuItem(Assets/ZYT ASSETS/Find References)]private static void SearchReference(){// 创建并打开资源引用查找窗口if (Selection.activeObject ! null !AssetDatabase.IsValidFolder(AssetDatabase.GetAssetPath(Selection.activeObject))){GetWindowResourceReferenceFinder(Resource Reference Finder).ReferenceFinder(Selection.activeObject);}}private void OnGUI(){// 显示搜索结果EditorGUILayout.LabelField(Search Results:);// 滚动视图开始scrollPosition EditorGUILayout.BeginScrollView(scrollPosition);EditorGUILayout.BeginVertical();// 显示搜索结果for (int i 0; i referencingAssets.Count; i){EditorGUILayout.ObjectField(referencingAssets[i], typeof(Object), true, GUILayout.Width(300));}EditorGUILayout.EndVertical();EditorGUILayout.EndScrollView();// 滚动视图结束}// 查找引用private void ReferenceFinder(Object targetResource){referencingAssets.Clear();// 获取选择资源的 GUIDstring assetPath AssetDatabase.GetAssetPath(targetResource);string assetGuid AssetDatabase.AssetPathToGUID(assetPath);// 遍历项目中所有 Prefab 文件string[] guids AssetDatabase.FindAssets(t:Prefab, new[] { Assets });int length guids.Length;for (int i 0; i length; i){string filePath AssetDatabase.GUIDToAssetPath(guids[i]);EditorUtility.DisplayCancelableProgressBar(Checking, filePath, (float)i / length);// 读取 Prefab 文件内容检查是否包含选择资源的 GUIDstring content File.ReadAllText(filePath);if (content.Contains(assetGuid)){// 如果包含将该 Prefab 添加到结果列表中Object referencingAsset AssetDatabase.LoadAssetAtPath(filePath, typeof(Object));referencingAssets.Add(referencingAsset);}}// 清除进度条EditorUtility.ClearProgressBar();}
}使用方法 如果未选中资源则是如下状况 工具是没法使用的 下图是现在修改后的界面