pc.AssetRegistry — это важная часть системы управления
ресурсами в PlayCanvas. Эта библиотека позволяет эффективно работать с
различными типами ресурсов (текстуры, модели, скрипты и т.д.) в процессе
разработки игр и интерактивных приложений. Она представляет собой
хранилище для всех активных ресурсов, используемых в проекте, и
обеспечивает удобное управление их загрузкой, выгрузкой и доступом.
pc.AssetRegistryОсновная цель pc.AssetRegistry — хранение и управление
ресурсами. Ключевые операции, которые он выполняет:
Для того чтобы начать работать с ресурсами в PlayCanvas, их
необходимо зарегистрировать. Ресурсы можно загрузить несколькими
способами, но основным инструментом для их управления является метод
add().
const asset = new pc.Asset('asset_name', 'model', {
url: 'path/to/model.glb'
});
asset.on('load', function () {
console.log('Модель успешно загружена');
});
asset.on('error', function (err) {
console.error('Ошибка загрузки модели', err);
});
app.assets.add(asset);
app.assets.load(asset);
В приведённом примере создаётся новый ресурс типа model
с именем asset_name. Он указывает на файл модели в формате
.glb. После регистрации и добавления ресурса в менеджер
(app.assets.add()), вызывается метод load(),
который начинает асинхронную загрузку модели.
Методы on('load') и on('error') позволяют
обработать события успешной загрузки и ошибки, соответственно.
После того как ресурсы загружены, можно получить доступ к ним через
метод find():
const asset = app.assets.find('asset_name');
Если ресурс зарегистрирован и загружен, find() вернёт
объект ресурса, который можно использовать в дальнейшем для отображения
или манипуляции.
Для асинхронного получения ресурсов, если они ещё не загружены,
используется метод load():
app.assets.load(asset).then(() => {
const model = asset.resource;
// работа с моделью
});
Метод load() гарантирует, что ресурс будет загружен
перед его использованием.
В случае, когда ресурс больше не используется, его можно выгрузить из
памяти. Это предотвращает излишнюю нагрузку на систему и освобождает
ресурсы. Для этого используется метод unload():
app.assets.remove(asset);
asset.unload();
Метод remove() удаляет ресурс из списка активных
ресурсов, а unload() выгружает его из памяти. Выгрузка
полезна для управления ресурсами в процессе игры, например, когда сцена
меняется, и старые активы становятся ненужными.
Одной из ключевых особенностей pc.AssetRegistry является
поддержка кэширования. После того как ресурс был загружен один раз, он
остаётся в памяти и может быть использован повторно, что значительно
ускоряет последующие операции с ним. Однако, если необходимо работать с
большим количеством данных, стоит следить за количеством загруженных
активов, чтобы не перегрузить систему.
if (!app.assets.find('asset_name')) {
app.assets.load(asset);
}
Этот код проверяет, зарегистрирован ли ресурс в системе, и если его нет, выполняет его загрузку.
Ресурсы могут иметь зависимости, например, текстуры, использующиеся в
модели, или скрипты, которые зависят от других библиотек. В таких
случаях pc.AssetRegistry автоматически отслеживает эти
зависимости и загружает их в нужной последовательности. Для управления
зависимостями можно использовать событие load на уровне
ресурса:
const textureAsset = new pc.Asset('texture', 'texture', {
url: 'path/to/texture.jpg'
});
textureAsset.on('load', function () {
// текстура загружена
});
app.assets.load(textureAsset);
Если текстура используется в другом ресурсе (например, в модели), PlayCanvas автоматически позаботится о загрузке этой текстуры перед загрузкой модели.
В процессе работы с pc.AssetRegistry могут возникать
ошибки, такие как проблемы с загрузкой файлов или отсутствие нужных
ресурсов. Для правильной обработки ошибок важно подписываться на событие
error:
asset.on('error', function (err) {
console.error('Ошибка загрузки ресурса:', err);
});
Это позволит своевременно обработать возникающие проблемы и, при необходимости, предпринять меры по их исправлению, например, запросить повторную загрузку или предоставить пользователю сообщения об ошибках.
Система PlayCanvas использует событийный подход, позволяя легко отслеживать изменения состояний и уведомлять приложение о том, что произошло в процессе работы с ресурсами. Например, можно отслеживать, когда все ресурсы были загружены:
app.assets.load(assets).then(function () {
console.log('Все ресурсы загружены');
});
В случае с большим количеством ресурсов можно использовать метод
load() с массивом активов. Это позволяет избежать
блокировки интерфейса и улучшить производительность приложения.
pc.AssetRegistry поддерживает множество типов ресурсов,
каждый из которых может требовать особого подхода к обработке. Вот
некоторые из наиболее распространённых типов:
Каждый тип ресурса имеет свои особенности загрузки и использования, но общая структура управления остается одинаковой для всех.
Загрузка и обработка ресурсов в PlayCanvas выполняются асинхронно, что позволяет эффективно работать с большими объёмами данных. Это также означает, что приложение остаётся отзывчивым, даже когда выполняются операции с множеством активов.
Использование промисов позволяет удобно обрабатывать последовательные операции загрузки:
app.assets.load([modelAsset, textureAsset])
.then(function () {
// обработка после загрузки всех ресурсов
})
.catch(function (error) {
// обработка ошибок
});
Асинхронный подход помогает избежать блокировки основного потока приложения, что особенно важно для игр и интерактивных приложений, где требуется высокая производительность и отзывчивость интерфейса.
pc.AssetRegistry представляет собой мощный инструмент
для эффективного управления ресурсами в PlayCanvas. Он предоставляет
гибкие механизмы для работы с загрузкой, выгрузкой и кэшированием
ресурсов, а также поддерживает обработку ошибок и зависимостей между
активами. Правильное использование этого менеджера позволяет значительно
улучшить производительность приложений и упрощает управление большими
объёмами данных.