资源注册表
AssetRegistry 是 PlayCanvas 管理资源的核心系统,维护应用中所有可用资源的集合,并提供查找、加载和管理方法。
访问注册表
通过应用对象访问资源注册表:
const assets = this.app.assets;
查找资源
按 ID 查找
每个资源都有唯一的数字 ID,这是引用资源最可靠的方式:
const asset = this.app.assets.get(123456);
按名称查找
按名称查找资源,返回首个匹配项:
const asset = this.app.assets.find('My Texture');
查找指定名称的全部资源:
const assets = this.app.assets.findAll('Enemy');
按标签查找
可为资源添加标签,便于分组。查找带有指定标签的全部资源:
const levelAssets = this.app.assets.findByTag('level-1');
将多个标签放入数组,查找同时具备这些标签的资源,即 AND 逻辑:
// Assets tagged with BOTH 'level-1' AND 'enemy'
const enemies = this.app.assets.findByTag(['level-1', 'enemy']);
将多个标签作为独立参数传入,查找具备任意一个标签的资源,即 OR 逻辑:
// Assets tagged with 'level-1' OR 'level-2'
const assets = this.app.assets.findByTag('level-1', 'level-2');
资源事件
资源添加、移除或加载时,注册表会发出事件:
注册表事件
// 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);
});
单个资源事件
也可以监听特定资源的事件:
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}`);
});
使用 ready()
ready() 可以方便地在资源加载完成时执行代码。如果资源已经加载,回调会立即执行:
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);
运行时添加资源
可以在运行时创建新资源并添加到注册表:
const asset = new pc.Asset('New Texture', 'texture', {
url: 'path/to/texture.png'
});
this.app.assets.add(asset);
this.app.assets.load(asset);
另请参阅
- 预加载:控制应用启动前加载哪些资源。
- 加载与卸载:动态管理资源加载。
AssetRegistryAPI 参考