static AssetDeleteResult OnWillDeleteAsset(string assetName, RemoveAssetOptions removeAssetOptions) { if (Data.IsUpToDate) { AssetReferenceViewer.RemoveAssetFromDatabase(assetName); AssetReferenceViewer.SaveDatabase(); } return(AssetDeleteResult.DidNotDelete); }
void IHasCustomMenu.AddItemsToMenu(GenericMenu menu) { menu.AddItem(new GUIContent("Rebuild Database"), false, () => { AssetReferenceViewer.RebuildDatabase(); Initialize(); }); menu.AddItem(new GUIContent("Clear Database"), false, AssetReferenceViewer.ClearDatabase); menu.AddItem(new GUIContent("Project Overlay"), WindowOverlay.Enabled, () => { WindowOverlay.Enabled = !WindowOverlay.Enabled; }); }
static void OnWillCreateAsset(string assetName) { if (Data.IsUpToDate) { Actions.Enqueue(() => { AssetReferenceViewer.AddAssetToDatabase(assetName); AssetReferenceViewer.SaveDatabase(); }); } }
private static void ProjectWindowItemOnGUI(string guid, Rect rect) { if (enabled) { AssetInfo assetInfo = AssetReferenceViewer.GetAsset(AssetDatabase.GUIDToAssetPath(guid)); if (assetInfo != null) { var content = new GUIContent(assetInfo.IsIncludedInBuild ? ProjectIcons.LinkBlue : ProjectIcons.LinkBlack, assetInfo.IncludedStatus.ToString()); GUI.Label(new Rect(rect.width + rect.x - 20, rect.y + 1, 16, 16), content); } } }
static AssetMoveResult OnWillMoveAsset(string sourcePath, string destinationPath) { if (Data.IsUpToDate) { Actions.Enqueue(() => { AssetReferenceViewer.RemoveAssetFromDatabase(sourcePath); AssetReferenceViewer.AddAssetToDatabase(destinationPath); AssetReferenceViewer.SaveDatabase(); }); } return(AssetMoveResult.DidNotMove); }
static string[] OnWillSaveAssets(string[] paths) { if (Data.IsUpToDate) { Actions.Enqueue(() => { foreach (string path in paths) { AssetReferenceViewer.RemoveAssetFromDatabase(path); AssetReferenceViewer.AddAssetToDatabase(path); } AssetReferenceViewer.SaveDatabase(); }); } return(paths); }
public void Initialize(Object current) { contentViewContainer.Clear(); if (current == null) { return; } var curNode = new NodeMaker(current); curNode.Q("node-border").style.borderLeftColor = NodeMaker.CurBorderColor; curNode.Q("node-border").style.borderRightColor = NodeMaker.CurBorderColor; curNode.Q("node-border").style.borderBottomColor = NodeMaker.CurBorderColor; curNode.Q("node-border").style.borderTopColor = NodeMaker.CurBorderColor; AddElement(curNode); const int offsetH = 600; const int deltaV = 260; AssetInfo selectedAssetInfo = AssetReferenceViewer.GetAsset(AssetDatabase.GetAssetPath(current)); if (selectedAssetInfo != null) { var i = 0; { var deps = selectedAssetInfo.dependencies; var half = deps.Count / 2; bool even = deps.Count % 2 == 0; foreach (var d in deps) { var item = d; var obj = AssetDatabase.LoadAssetAtPath(item, typeof(Object)); if (obj == null) { AssetReferenceViewer.RebuildDatabase(); return; } else { var node = new NodeMaker(obj); node.style.left = -offsetH; node.style.top = (i - half) * deltaV + (even ? deltaV / 2 : 0); node.AddManipulator(new DoubleClickManipulator(() => { Selection.activeObject = obj; Initialize(obj); })); AddElement(node); var edge = curNode.InPort.ConnectTo(node.OutPort); AddElement(edge); } i++; } i = 0; } { var refs = selectedAssetInfo.references; var half = refs.Count / 2; bool even = refs.Count % 2 == 0; foreach (var r in refs) { var item = r; var path = string.Join("/", item); var obj = AssetDatabase.LoadAssetAtPath(path, typeof(Object)); if (obj == null) { Debug.LogError(item); } else { var node = new NodeMaker(obj); node.style.left = offsetH; node.style.top = (i - half) * deltaV + (even ? deltaV / 2 : 0); node.AddManipulator(new DoubleClickManipulator(() => { Selection.activeObject = obj; Initialize(obj); })); AddElement(node); var edge = curNode.OutPort.ConnectTo(node.InPort); AddElement(edge); } i++; } } } }
private void Initialize() { if (Selection.activeObject == null) { return; } visualTree = Resources.Load <VisualTreeAsset>("AssetReferenceViewer"); var rootView = rootVisualElement; var root = visualTree.CloneTree().Q <VisualElement>("Root"); rootView.Clear(); rootView.Add(root); graphViewer = new GraphViewer(); graphViewer.Initialize(Selection.activeObject); var graph = rootView.Q <VisualElement>("Graph"); graph.Add(graphViewer); var helpBox = root.Q <VisualElement>("HelpBox"); helpBox.style.display = DisplayStyle.None; string selectedPath = AssetDatabase.GetAssetPath(Selection.activeObject); var objName = root.Q <Label>("ObjName"); objName.text = Selection.activeObject.name; var objPath = root.Q <Label>("Path"); objPath.text = selectedPath; var icon = root.Q <VisualElement>("AssetIcon"); icon.style.backgroundImage = new StyleBackground((Texture2D)AssetDatabase.GetCachedIcon(selectedPath)); if (!selectedPath.StartsWith("Assets/")) { var helpB = new HelpBox("This asset is outside Assets folder or you selected something in the scene", HelpBoxMessageType.Warning); graphViewer.Add(helpB); return; } var scroll = root.Q <ScrollView>("Scroll"); if (Directory.Exists(selectedPath)) { return; } AssetInfo selectedAssetInfo = AssetReferenceViewer.GetAsset(selectedPath); if (selectedAssetInfo == null) { AssetReferenceViewer.RebuildDatabase(); EditorApplication.delayCall = Initialize; return; } var buildStatusIcon = root.Q <VisualElement>("BuildStatusIcon"); buildStatusIcon.style.backgroundImage = selectedAssetInfo.IsIncludedInBuild ? ProjectIcons.LinkBlue : ProjectIcons.LinkBlack; buildStatusIcon.tooltip = selectedAssetInfo.IncludedStatus.ToString(); var dependenciesFoldout = root.Q <Foldout>("Dependencies"); dependenciesFoldout.Clear(); dependenciesFoldout.text = "Dependencies (" + selectedAssetInfo.dependencies.Count + ")"; scroll.Add(dependenciesFoldout); var referencesFoldout = root.Q <Foldout>("References"); referencesFoldout.Clear(); referencesFoldout.text = "References (" + selectedAssetInfo.references.Count + ")"; scroll.Add(referencesFoldout); foreach (var d in selectedAssetInfo.dependencies) { var item = visualTree.CloneTree().Q <VisualElement>("Item"); var itemIcon = item.Q <VisualElement>("ItemIcon"); var itemLabel = item.Q <Label>("ItemLabel"); var inBuildIcon = item.Q <VisualElement>("InBuildIcon"); itemLabel.text = Path.GetFileName(d); item.RegisterCallback <MouseUpEvent>(e => { Selection.activeObject = AssetDatabase.LoadAssetAtPath <Object>(d); }); itemIcon.style.backgroundImage = AssetDatabase.GetCachedIcon(d) as Texture2D; AssetInfo depInfo = AssetReferenceViewer.GetAsset(d); inBuildIcon.style.backgroundImage = depInfo.IsIncludedInBuild ? ProjectIcons.LinkBlue : ProjectIcons.LinkBlack; inBuildIcon.tooltip = depInfo.IncludedStatus.ToString(); item.style.display = DisplayStyle.Flex; dependenciesFoldout.contentContainer.Add(item); } foreach (var r in selectedAssetInfo.references) { var item = visualTree.CloneTree().Q <VisualElement>("Item"); var itemIcon = item.Q <VisualElement>("ItemIcon"); var itemLabel = item.Q <Label>("ItemLabel"); var inBuildIcon = item.Q <VisualElement>("InBuildIcon"); itemLabel.text = Path.GetFileName(r); item.RegisterCallback <MouseUpEvent>(e => { Selection.activeObject = AssetDatabase.LoadAssetAtPath <Object>(r); }); itemIcon.style.backgroundImage = AssetDatabase.GetCachedIcon(r) as Texture2D; AssetInfo depInfo = AssetReferenceViewer.GetAsset(r); inBuildIcon.style.backgroundImage = depInfo.IsIncludedInBuild ? ProjectIcons.LinkBlue : ProjectIcons.LinkBlack; inBuildIcon.tooltip = depInfo.IncludedStatus.ToString(); item.style.display = DisplayStyle.Flex; referencesFoldout.contentContainer.Add(item); } if (!selectedAssetInfo.IsIncludedInBuild) { helpBox.style.display = DisplayStyle.Flex; var helpLabel = root.Q <Label>("HelpBoxLabel"); var helpButton = root.Q <Button>("HelpButton"); var helpIcon = root.Q <VisualElement>("HelpIcon"); helpButton.text = "Delete Asset"; helpButton.style.display = DisplayStyle.Flex; helpLabel.text = "This asset is not referenced and never used. Would you like to delete it ?"; helpIcon.style.backgroundImage = (Texture2D)EditorGUIUtility.IconContent("console.warnicon").image; helpButton.clicked += () => { File.Delete(selectedPath); AssetDatabase.Refresh(); AssetReferenceViewer.RemoveAssetFromDatabase(selectedPath); }; } EditorApplication.delayCall = () => { graphViewer.FrameAll(); }; }
private IncludedInBuild CheckIncludedStatus() { foreach (var referencer in references) { AssetInfo refInfo = AssetReferenceViewer.GetAsset(referencer); if (refInfo.IsIncludedInBuild) { return(IncludedInBuild.Referenced); } } bool isInEditor = false; string[] directories = path.ToLower().Split('/'); for (int i = 0; i < directories.Length - 1; i++) { switch (directories[i]) { case "editor": isInEditor = true; break; case "resources": return(IncludedInBuild.ResourceAsset); case "plugins": break; default: break; } } string extension = System.IO.Path.GetExtension(path); switch (extension) { case ".cs": if (isInEditor) { return(IncludedInBuild.NotIncludable); } else { return(IncludedInBuild.RuntimeScript); } case ".unity": if (EditorBuildSettings.scenes.Select(x => x.path).Contains(path)) { return(IncludedInBuild.SceneInBuild); } break; // Todo : Handle DLL // https://docs.unity3d.com/ScriptReference/Compilation.Assembly-compiledAssemblyReferences.html // CompilationPipeline // Assembly Definition default: break; } return(IncludedInBuild.NotIncluded); }