Dependency Scanner
The Dependency Scanner analyzes asset references within your project, helping you understand relationships between assets and folders.
Overview
The scanner can analyze entire folders (recursive) and discover:
- Outbound Dependencies - What external assets does this folder use?
- Inbound Dependencies - What external assets reference this folder?
- Bidirectional - Both directions at once
- Broken References - References to assets that no longer exist
How It Works
- Select a folder to scan
- The scanner queries the Asset Registry for all assets in that folder
- For each asset, it finds dependencies (outbound) and referencers (inbound)
- Results are categorized as internal (within folder) or external (outside folder)
- External references are reported as "leaks"
Features
Bidirectional Analysis
Get a complete picture of asset relationships:
Inbound (Referencers)
- What Blueprints reference assets in this folder?
- What materials use textures from this folder?
- Are assets in other folders dependent on this content?
Outbound (Dependencies)
- What external assets does this folder depend on?
- Does this folder reference engine content or plugin content?
- Is this folder self-contained?
Broken Reference Detection
The scanner identifies references to assets that no longer exist:
- Deleted assets that left dangling references
- Moved assets without proper redirector cleanup
- One-click fixing via the subsystem API
Plugin Dependency Filtering
Optionally exclude plugin content from results when you only care about project-level dependencies.
Usage
From Content Browser
- Right-click a folder in the Content Browser
- Select Elys License Manager > Analyze Dependencies
- View results in the Dependency Analyzer panel
From Tools Menu
- Go to Tools > Elys License Manager > Dependency Analyzer
- Enter a folder path
- Choose scan type (Bidirectional, Outbound Only, or Inbound Only)
- Click Scan
Via Blueprint
// Get the subsystem
UERP_AssetInsightsEditorSubsystem* Subsystem =
GEditor->GetEditorSubsystem<UERP_AssetInsightsEditorSubsystem>();
// Bidirectional scan
FERP_AssetDependencyScanResult Result = Subsystem->ScanFolder("/Game/MyFolder");
// Outbound only
FERP_AssetDependencyScanResult OutResult = Subsystem->ScanFolderOutbound("/Game/MyFolder");
// Inbound only
FERP_AssetDependencyScanResult InResult = Subsystem->ScanFolderInbound("/Game/MyFolder");
// Check if safe to delete
bool bSafe = Result.bSafeToDelete;
Scan Results
Result Structure
USTRUCT(BlueprintType)
struct FERP_AssetDependencyScanResult
{
// The folder that was scanned
FString ScannedFolderPath;
// Assets inside folder -> external assets they depend on
TMap<FString, FERP_DependencyList> OutboundDependencies;
// External assets -> assets inside folder they reference
TMap<FString, FERP_DependencyList> InboundDependencies;
int32 TotalAssetsScanned;
int32 TotalOutboundLeaks;
int32 TotalInboundLeaks;
bool bSafeToDelete;
// Broken references found
TMap<FString, FString> BrokenReferences;
int32 BrokenReferenceCount;
};
Understanding Results
- TotalOutboundLeaks - Number of assets in this folder that depend on external content
- TotalInboundLeaks - Number of external assets that reference this folder
- bSafeToDelete - True if no external assets reference this folder (no inbound leaks)
Use Cases
Before Deleting a Folder
bool bSafe = Subsystem->IsFolderSafeToDelete("/Game/OldContent");
if (bSafe)
{
Subsystem->SafeDeleteFolder("/Game/OldContent");
}
Fixing Broken References
FERP_AssetDependencyScanResult Result = Subsystem->ScanFolder("/Game/MyFolder");
if (Result.BrokenReferenceCount > 0)
{
int32 Fixed = Subsystem->FixBrokenReferences(Result);
}
Performance
| Operation | Small Project (< 1K assets) | Large Project (> 10K assets) |
|---|---|---|
| Folder scan | < 0.5 seconds | 1-5 seconds |
| Recursive scan | < 1 second | 5-15 seconds |
Next Steps
- Safe Deletion - Delete assets safely after scanning
- Folder Management - Organization and cleanup tools