Asset Registry
The AssetRegistry is the central system for managing assets in PlayCanvas. It maintains a collection of all assets available to your application and provides methods to find, load, and manage them.
Accessing the Registry
The asset registry is available via the application object:
const assets = this.app.assets;
Finding Assets
By ID
Every asset has a unique numeric ID. This is the most reliable way to reference an asset:
const asset = this.app.assets.get(123456);
By Name
Find an asset by its name. Returns the first matching asset:
const asset = this.app.assets.find('My Texture');
Find all assets with a given name:
const assets = this.app.assets.findAll('Enemy');
By Tag
Assets can be tagged for easy grouping. Find all assets with a specific tag:
const levelAssets = this.app.assets.findByTag('level-1');
Find assets matching multiple tags (AND logic):
// Assets tagged with BOTH 'level-1' AND 'enemy'
const enemies = this.app.assets.findByTag('level-1', 'enemy');
Find assets matching any of several tags (OR logic):
// Assets tagged with 'level-1' OR 'level-2'
const assets = this.app.assets.findByTag(['level-1', 'level-2']);
Asset Events
The registry emits events when assets are added, removed, or loaded:
Registry Events
// Asset added to registry
this.app.assets.on('add', (asset) => {
console.log('Asset added:', asset.name);
});
// Asset removed from registry
this.app.assets.on('remove', (asset) => {
console.log('Asset removed:', asset.name);
});
// Asset loaded
this.app.assets.on('load', (asset) => {
console.log('Asset loaded:', asset.name);
});
// Asset failed to load
this.app.assets.on('error', (err, asset) => {
console.error('Failed to load:', asset.name, err);
});
Individual Asset Events
You can also listen for events on specific assets:
const asset = this.app.assets.find('My Texture');
// Called when the asset's resource is ready
asset.on('load', (asset) => {
console.log('Texture loaded:', asset.resource);
});
// Called if loading fails
asset.on('error', (err, asset) => {
console.error('Failed:', err);
});
// Called when the asset is removed from the registry
asset.on('remove', (asset) => {
console.log('Asset removed');
});
// Called when any property changes
asset.on('change', (asset, property, newValue, oldValue) => {
console.log(`${property} changed from ${oldValue} to ${newValue}`);
});
Using ready()
The ready() method is a convenient way to execute code when an asset is loaded. If the asset is already loaded, the callback fires immediately:
const asset = this.app.assets.find('My Texture');
asset.ready((asset) => {
// Asset is guaranteed to be loaded here
const texture = asset.resource;
material.diffuseMap = texture;
});
// Make sure to trigger loading if not already loaded
this.app.assets.load(asset);
Adding Assets at Runtime
You can create and add new assets to the registry at runtime:
const asset = new pc.Asset('New Texture', 'texture', {
url: 'path/to/texture.png'
});
this.app.assets.add(asset);
this.app.assets.load(asset);
See Also
- Preloading - Control which assets load before your app starts
- Loading and Unloading - Dynamically manage asset loading
AssetRegistryAPI Reference