{"id":22204388,"url":"https://github.com/innogames/asset-relations-viewer","last_synced_at":"2026-01-05T12:20:58.021Z","repository":{"id":38194540,"uuid":"250560579","full_name":"innogames/asset-relations-viewer","owner":"innogames","description":"Plugin to display dependencies between assets, files, assetgroups, etc. in a tree based view within the Unity editor.","archived":false,"fork":false,"pushed_at":"2025-05-26T10:55:42.000Z","size":4232,"stargazers_count":159,"open_issues_count":0,"forks_count":14,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-05-26T11:52:30.489Z","etag":null,"topics":["assets","dependencies","unity"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/innogames.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-27T14:47:44.000Z","updated_at":"2025-05-26T10:48:47.000Z","dependencies_parsed_at":"2024-01-17T09:14:04.744Z","dependency_job_id":"0d6f088a-dcd6-4519-9c60-621f09969e4c","html_url":"https://github.com/innogames/asset-relations-viewer","commit_stats":null,"previous_names":[],"tags_count":55,"template":false,"template_full_name":null,"purl":"pkg:github/innogames/asset-relations-viewer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innogames%2Fasset-relations-viewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innogames%2Fasset-relations-viewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innogames%2Fasset-relations-viewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innogames%2Fasset-relations-viewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/innogames","download_url":"https://codeload.github.com/innogames/asset-relations-viewer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innogames%2Fasset-relations-viewer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267306740,"owners_count":24067035,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-27T02:00:11.917Z","response_time":82,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["assets","dependencies","unity"],"created_at":"2024-12-02T17:17:09.631Z","updated_at":"2026-01-05T12:20:58.006Z","avatar_url":"https://github.com/innogames.png","language":"C#","funding_links":[],"categories":["GamePlay"],"sub_categories":["HUD"],"readme":"# Asset Relations Viewer\n\nPlugin to display dependencies between assets, files, AddressableAssetGroups, etc. in a tree based view within the Unity editor.\n\n![](Docs~/Images/arv_overview.png)\n\n- [Features](#features)\n- [Installation](#installation)\n- [First Usage](#first-usage)\n- [Controls](#controls)\n- [Dependency type list](#dependency-type-list)\n  * [Dependency types](#dependency-types)\n  * [Caching](#caching)\n- [Node search and filter](#node-search-and-filter)\n- [Showing dependency pathes](#showing-dependency-pathes)\n- [Node handlers](#node-handlers)\n- [Troubleshooting](#troubleshooting)\n- [Standalone dependency cache](#standalone-dependency-cache)\n- [Addons](#addons)\n\n\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\n## Features\n\n* Standalone Editor UI without any external dependencies\n* View which dependencies an asset has to other assets\n* View which assets have the given asset as a dependency\n* Show thumbnails of all assets in the dependency tree\n* filter for Asset Names and Asset Types in displayed tree\n* Highlight if an asset is used in the project (going to be packed in the app)\n* Show path of where an asset is used exactly within a scene, prefab or asset\n* Display byte size of compressed asset together with overall size of dependency tree\n* Extendable by own dependency resolvers, for example to show addressables\n* Support for additional Connection- and NodeTypes which can be added via addons, for example:\n\t* Addressable Groups\n\t* Addressables\n\t* AssetBundles\n\t* LocaKeys\n\t* AssemblyDefinitions\n\t* Etc.\n\n\u003cbr\u003e\u003cbr\u003e\n\n## Installation\n\n#### For Unity 2019.3 or later (Using Unity Package Manager)\n\nFind the manifest.json file in the packages folder of your project and edit it to look like this:\n```js\n{\n  \"dependencies\": {\n    \"com.innogames.asset-relations-viewer\": \"https://github.com/innogames/asset-relations-viewer.git\",\n    ...\n  },\n}\n```\n\nIf you are in production and not want to get automatic updates always use a tagged version like:\n\n```js\n\t...\n    \"com.innogames.asset-relations-viewer\": \"https://github.com/innogames/asset-relations-viewer.git#VERSION_TAG\",\n    ...\n\n```\n\n\u003cbr\u003e\u003cbr\u003e\n## First Usage\n\n1. Select an asset within the unity project explorer\n2. Right click to open context menu for an asset\n3. Select the \"Asset Relations Viewer/Open\" menu item\n4. On Dialog for the first startup of AssetRelationsViewer click on yes\n5. Wait for the resolver to find all dependencies for all assets in the project which can take a while for a large project with many assets\n\n\u003cbr\u003e\u003cbr\u003e\n## Controls\n\n#### Menu items\n\nMenu items sorted from left to right.\n\u003cbr\u003e\n\n**Back button (\"\u003c\u003c\")**: Button to go back to previous selected asset to view.\u003cbr/\u003e\n**Thumbnail Size**: Size of the thumbnails in pixels.\u003cbr/\u003e\n**Node Depth**: Depth of the shown tree structure.\u003cbr/\u003e\n\n**Reload**: Reloads the cache without update.\u003cbr/\u003e\n**Update**: Updates dependencies and refreshes view after asset has changed.\u003cbr/\u003e\n**Save and Update**: Saves the project before updating cache.\u003cbr/\u003e\n**Clear Cache and Update**: Clears cache before updating to force a complete rebuild of all caches.\u003cbr/\u003e\n\n**Async Update**: Enables update of cache being split in multiple frames. This enables Unity to properly unload and clean memory resulting in much less memory peak consumption at the cost of longer update times. [Info](#async-dependency-update-details)\u003cbr/\u003e\n**Unload Unused Assets**: If Unused Assets should be unloaded during cache update. Doing so will result in Assets being reloaded multiple times during update resulting in less peak memory at the cost of longer update times.\u003cbr/\u003e\n**Unload Interval**: The interval at which unused assets should be unloaded.\u003cbr/\u003e\n\n**Show additional node information **: Displays size and also type of the nodes.\u003cbr/\u003e\n**Show Thumbnails**: Shows correct thumbnails on nodes if available.\u003cbr/\u003e\n**Show nodes Once**: To only show each node (Asset) once within the displayed tree.\u003cbr/\u003e\n**Show hierarchy Once**: To only show the same dependency hierarchy for a node once within the displayed tree.\u003cbr/\u003e\n**Show referencers**: If referencers (Assets that have the selected asset as a dependency) should be shown or not.\u003cbr/\u003e\n**Show Property Pathes**: Shows path of dependency (GameObject-\u003eComponents-\u003eClassMemberVariable).\u003cbr/\u003e\n**Align Nodes**: If all nodes of the same depth should be aligned horizontally in the displayed tree.\u003cbr/\u003e\n**Hide Filtered Nodes**: Hide all nodes that are filtered out instead of just graying them out.\u003cbr/\u003e\n**Highlight packaged assets**: Adds green highlight to nodes which are going to be packed into the app (Are actually used by the game).\u003cbr/\u003e\n**Merge Relations**: If a node has the same asset as a dependency multiple times, the same dependency is just shown once.\u003cbr/\u003e\n\n#### Node\n\n![](Docs~/Images/arv_node.png)\n\n**s**: If the selected node is an asset, it will be selected in the unity project explorer.\u003cbr/\u003e\n**\u003e**: Sets node as currently selected node.\u003cbr/\u003e\n\n# Dependency type list\nThe AssetRelationViewer can display several types of dependencies. In order for them to show up these need to be selected first.\n\n![](Docs~/Images/arv_connectiontypes_base.png)\n\nAfter selecting a dependency type that is currently not loaded the \u003cb\u003eLoad caches\u003c/b\u003e button need to be clicked on in order to finally load the dependency types. \u003cbr/\u003e\nUnused dependency types can be unloaded by clicking on the \u003cb\u003eU\u003c/b\u003e button.\n\n![](Docs~/Images/arv_connectiontypes_activation.png)\n\n**L** Dependency type is active and currently loaded.\u003cbr/\u003e\n**R** Dependency type got activated but needs to be loaded.\u003cbr/\u003e\n**U** Dependency type got deactivated and can be unloaded.\u003cbr/\u003e\n**R Button** Refreshes the dependencies just for this dependency type.\n\n## Dependency types\n\n### Asset-\u003eAsset by Object\nDependencies of assets to assets by a UnityEngine.Object reference.\n\n![](Docs~/Images/arv_assettoasset_dependencies.png)\n\n### Asset-\u003eFile\nDependencies of assets to the file they are part of.\u003cbr/\u003e\nThis is required since a file can have several sub assets meaning that an asset is not automatically the file itself even though most files only contain a single asset.\u003cbr/\u003e\nNote: Only the file itself has size information about the assets it contains. So in order to get size information with the \"Show additional node information\" this dependency type need to be enabled.\u003cbr/\u003e\n\n![](Docs~/Images/arv_assettofile_dependencies.png)\n\n### Scene GameObject-\u003eGameObject\nDependencies of GameObject to GameObjects within the currently loaded scene or prefab.\u003cbr/\u003e\nIf a GameObject is selected as the viewed node only GameObject-\u003eGameObject dependencies are shown. The GameObject-\u003eGameObject dependency view can not be viewed together with other dependencies.\u003cbr/\u003e\nNote: If the opened scene/prefab changed after opening the AssetRelationViewer the cache needs to be refreshed.\u003cbr/\u003e \n\n![](Docs~/Images/arv_inscene_gameobject_dependencies.png)\n\n### AsmDef-\u003eAsmDef\nDependencies between AssemblyDefinitions to other AssemblyDefinitions as well as AssemblyDefinitionReferences to AssemblyDefinitions\n![](Docs~/Images/arv_asmdef_to_asmdef_dependencies.png)\n\n## Dependency types for Unity Addressables\nThe following dependency types are only available if the Unity Addressables addon is added to the project.\n\n### Asset-\u003eAsset by AssetReference\n\nIn addressables a different Object can be referenced by a so called AssetReference instead of UnityEngine.Object\u003cbr/\u003e\nTo display these references this node type needs to be enabled. \u003cbr/\u003e\n\n![](Docs~/Images/arv_assettoassetref_dependencies.png)\n\n### AddressableAssetGroup-\u003eAsset\n\nAddressableAssetGroups of the Addressable system contain a list of assets.\u003cbr/\u003e\nBy enabling this dependency type these assets can be viewed as a dependency.\u003cbr/\u003e\n\n### Asset-\u003eAddressableAssetGroup\n\nUsed to display the dependency of an asset to the AddressableAssetGroup it is part of.\u003cbr/\u003e\nThis is basically the opposite direction of the \u003cb\u003eAddressableAssetGroup-\u003eAsset\u003c/b\u003e dependency.\u003cbr/\u003e\nThis can be used to display bidirectional dependencies between assets and AddressableAssetGroups when also the \u003cb\u003eAddressableAssetGroup-\u003eAsset\u003c/b\u003e is enabled.\u003cbr/\u003e\n\n#### Note\nHaving both \u003cb\u003eAddressableAssetGroup-\u003eAsset\u003c/b\u003e and \u003cb\u003eAsset-\u003eAddressableAssetGroup\u003c/b\u003e enabled at the same time can lead to very large dependency trees if AssetBundles have a lot of dependencies to other AssetBundles. \u003cbr/\u003e\n\n![](Docs~/Images/arv_bidirectional_assetgroup_dependencies.png)\n\n## Caching\nMost dependency types are cached to only update the dependencies again if the file itself got changed.\u003cbr/\u003e \nThis greatly reduces the startup time of the AssetRelationsViewer since for large projects finding all Asset-\u003eAsset dependencies can take several minutes.\nIf a file needs to be updated is currently determined by the timestamp of the file but could be changed to in addition also take a file hash into account.\n\n### Location\nThe caches are stored in \u003cb\u003ePROJECT_ROOT/Library/NodeDependencyCache/\u003c/b\u003e.\u003cbr/\u003e \nDepending on the project size these files can be several several megabytes in size.\u003cbr/\u003e \n\n### Clearing the cache\nThe cache files can either be deleted manually or inside Unity under the Window/Node Dependency Cache/Clear Cache Files menu item.\n\n# Node search and filter\n![](Docs~/Images/arv_node_search_and_filter.png)\n\n## Node search\nSince every type of node can be viewed in the AssetRelationViewer like Assets, Files, AddressableAssetGroups, AsmDefs, etc. is sometimes helpful to have a generic node search.\u003cbr/\u003e\nOnly known nodes based on the activated dependency types are shown, meaning that only nodes found by any activated DependencyCaches are selectable.\u003cbr/\u003e\nNodes can be searched for by name and by type. \u003cbr/\u003e\nBased on the filtered name and type the dropdown will show all available nodes to select.\u003cbr/\u003e\nThis enables also to find nodes that are otherwise not findable in the explorer, like the Default-Material of Unity.\u003cbr/\u003e\nOnce selected in the dropdown the current node can be shown in the AssetRelationsViewer by clicking \u003cb\u003eSelect\u003c/b\u003e.\u003cbr/\u003e\n\n## Node hierarchy filter\nTo specifically filter for either a node name or node type the \"Node hierarchy filter:\" can be used.\u003cbr/\u003e\nOnly the matching nodes will be highlighted and all others are grayed out.\u003cbr/\u003e\nIn the example the dependency tree is filtered for \"vertexLit\".\u003cbr/\u003e\n\n![](Docs~/Images/arv_node_search_and_filter.png)\n\n# Showing dependency pathes\n\nIn the AssetRelationsViewer it is possible to not only view dependencies between Asset-\u003eAsset for example but also exactly through with path the dependency exist.\u003cbr/\u003e\nIn order to view the pathes \"Show Property Pathes\" needs to be activated.\u003cbr/\u003e\nOnce active the whole path of the dependency (GameObject-\u003eComponents-\u003eClassMemberVariable) is shown in the hierarchy tree view.\u003cbr/\u003e\n\n![](Docs~/Images/arv_pathes.png)\n\n# Node handlers\nGUI options specific to a node type.\u003cbr/\u003e\n\n![](Docs~/Images/arv_typehandler.png)\n\n## Asset\nOptions specific to Assets.\u003cbr/\u003e\n\nContains dropdown to select an asset in the project.\u003cbr/\u003e\n**Sync to explorer**: If selected the currently selected asset in the project explorer will be the one shown in the AssetRelationsViewer. \u003cbr/\u003e\n\n## File\nOptions specific to Files. \u003cbr/\u003e\nCurrently there are no specific options for them.\u003cbr/\u003e\n\n## InSceneGameObject\nOptions for in scene GameObjects.\u003cbr/\u003e\n\nContains dropdown to select a GameObject from the currently opened scene/prefab.\u003cbr/\u003e\n**Sync to hierarchy**: If selected the currently selected GameObject in the currently opened scene/prefab will be shown in the AssetRelationsViewer.\u003cbr/\u003e\n\n# Async dependency update details\n![](Docs~/Images/arv_asyncupdate.png)\nDoing the whole dependency search in one frame leads to a very high memory consumption since Unity cant really clean memory here. \nEven calling CG.Collect() several time during the search does not help.\n\u003cbr/\u003e\u003cbr/\u003e\nFor example, the peak memory consumption of a full update on our live project increases ~10GB when doing a full dependency search.\nWith the async approach this is only increasing ~3GB.\nThis option is enabled by default.\n\u003cbr/\u003e\u003cbr/\u003e\n\n# Troubleshooting\nThere can be cases where no tree is shown in the AssetRelationsViewer\n\n* Make sure a node (Asset) is selected to be shown\n* Make sure a dependency cache (AssetDependencyCache) and dependency resolver (ObjectDependencyResolver) is selected, otherwise no dependency can be found\n* After a code recompile the dependency cache needs to be updated by clicking on \"Refresh\"\n* Some dependency types might not update/work correctly when being in PlayMode\n* There might be some rare cases where the cache didn't get updated correctly. If there are dependencies missing which you are sure should be displayed sometimes also complete cache rebuild with a \u003cb\u003eClean and Refresh\u003c/b\u003e can help.\n\n# Standalone dependency cache\nThe dependency cache can be used without the AssetRelationsViewer.\u003cbr/\u003e\nThis makes it possible to use the cache for other tools where dependency information between assets, files, etc. is required. \u003cbr/\u003e\nIn the following example we find out which asset have a dependency on the BaseProductions prefab.\n\n```c#\nNodeDependencyLookupContext context = new NodeDependencyLookupContext();\nResolverUsageDefinitionList resolverList = new ResolverUsageDefinitionList();\n\n// If we want to update the cache before we try to find references\nbool shouldUpdate = false;\n\nresolverList.Add\u003cAssetDependencyCache, ObjectSerializedDependencyResolver\u003e(true, shouldUpdate, shouldUpdate);\nresolverList.Add\u003cAssetToFileDependencyCache, AssetToFileDependencyResolver\u003e(true, shouldUpdate, shouldUpdate);\n\nNodeDependencyLookupUtility.LoadDependencyLookupForCaches(context, resolverList);\n\n// Get guid for BaseProductions prefab\nstring[] assetGuids = AssetDatabase.FindAssets(\"t:prefab PrefabInstance 1\");\n\n// Get the node for the files guid\nNode fileNode = context.RelationsLookup.GetNode(assetGuids[0], FileNodeType.Name);\n\n// Iterate over all references of the filenode to find the assetnode referencing it\nforeach (Connection referencer in fileNode.Referencers)\n{\n\tif (referencer.Node.Type == AssetNodeType.Name)\n\t{\n\t\t// Find out who is referencing the assetnode\n\t\tforeach (Connection assetreferencer in referencer.Node.Referencers)\n\t\t{\n\t\t\tDebug.LogWarning($\"[{referencer.Node.ConcreteType}]{referencer.Node.Name} \" +\n\t\t\t\t\t\t\t $\"is directly referenced by [{assetreferencer.Node.ConcreteType}]{assetreferencer.Node.Name}\");\n\t\t}\n\t}\n}\n```\n\nExecuting this would result in the following output\u003cbr/\u003e\n\u003cb\u003e[GameObject]BaseProductions is directly referenced by [GameObject]ProductionTabContent\u003c/b\u003e\n\nFor this script to work in your own project the name and type of the asset in AssetDatabase.FindAssets() needs to be adapted accordingly to an asset that exists in your project.\n\nFor reduced memory consumption also \u003cb\u003eNodeDependencyLookupUtility.LoadDependencyLookupForCachesAsync();\u003c/b\u003e can be used if executed in an Enumerator.\nThe package provides the \u003cb\u003eEditorCoroutineWithExceptionHandling\u003c/b\u003e for starting a coroutine in the editor with exception handling.\n\n```c#\nvar coroutine = new EditorCoroutineWithExceptionHandling();\ncoroutine.Start(YOUR_COROUTINE_THAT_CALLS_NodeDependencyLookupUtility.LoadDependencyLookupForCachesAsync(),\n\texception =\u003e\n\t{\n\t\tEditorUtility.ClearProgressBar();\n\t\tthrow exception;\n\t});\n```\n\n\n# Addons\nSupport to display different connection and node types can be added by addons.\n\n## Writing own addons to support custom Connection- and NodeTypes\nOwn addons can be also added so custom dependencies with any NodeType and dependency type can be added to be viewed inside the Asset Relations Viewer. \u003cbr/\u003e\nFor an example how to create addons please have a look at the Addressables implementation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finnogames%2Fasset-relations-viewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finnogames%2Fasset-relations-viewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finnogames%2Fasset-relations-viewer/lists"}