Одной из ключевых возможностей библиотеки PlayCanvas является удобная система загрузки ресурсов. Ресурсы могут быть загружены различными способами: по имени, по тегу или по идентификатору (id). Каждый из этих методов имеет свои особенности и применения в разных сценариях. Рассмотрим их более подробно.
Загрузка ресурсов по имени — один из самых распространённых способов
работы с ресурсами в PlayCanvas. Этот метод позволяет получить ресурс,
если его название заранее известно. В PlayCanvas ресурсы могут быть
загружены и использованы через глобальный объект
app.assets. Для загрузки ресурса по имени используется
метод get(), который ищет ресурс в каталоге по его
имени.
var texture = app.assets.get('myTexture');
В данном примере метод get() возвращает ресурс с именем
myTexture. Если ресурс с таким именем существует в
каталоге, он будет возвращён. В случае, если ресурс ещё не был загружен
или не существует, возвращается null.
Если ресурс не был загружен, можно использовать методы для асинхронной загрузки, чтобы убедиться в наличии объекта перед его использованием. Например, если необходимо загрузить текстуру, которую пользователь или система указали через имя, можно сделать это следующим образом:
app.assets.loadFromUrl('textures/myTexture.png', 'texture', function (asset) {
var texture = asset.resource;
// дальнейшая работа с текстурой
});
Этот код загружает текстуру из файла и асинхронно вызывает функцию обратного вызова с объектом ресурса.
Загрузка по тегу используется, когда нужно работать с группой ресурсов, имеющих одинаковый тег. Теги — это строковые метки, которые могут быть присвоены ресурсам для их группировки по типу, назначению или другим признакам. Использование тегов позволяет эффективно управлять и загружать несколько ресурсов одновременно.
Теги удобно использовать в случаях, когда требуется обработать сразу
несколько объектов, которые относятся к одной категории. Например, если
все текстуры для определённой сцены имеют тег
"scene1-textures", можно легко получить доступ ко всем этим
ресурсам через тег.
var assets = app.assets.findByTag('scene1-textures');
В результате выполнения этого кода будет возвращён массив всех
ресурсов, содержащих тег "scene1-textures". Каждый элемент
массива будет представлять собой объект Asset. В дальнейшем
можно обработать каждый из этих объектов, например, загрузить текстуры
или применить их к материалам.
Кроме того, можно комбинировать теги с другими способами фильтрации,
такими как тип ресурса. Например, чтобы найти только текстуры среди всех
ресурсов с тегом "scene1-textures", можно использовать
следующее:
var textures = app.assets.findByTag('scene1-textures').filter(function (asset) {
return asset.type === 'texture';
});
Этот код отфильтрует только те ресурсы, которые являются текстурами.
Каждый ресурс в PlayCanvas имеет уникальный идентификатор —
id. Этот идентификатор может быть полезен для доступа к
ресурсу, особенно когда необходимо загрузить конкретный объект из уже
загруженного набора данных.
Идентификаторы особенно полезны в случаях, когда ресурсы были заранее загружены в рамках более сложных операций, и необходимо ссылаться на них позже.
var asset = app.assets.get(id);
Здесь id — это уникальный идентификатор ресурса, который
был присвоен во время его создания или загрузки. Получив id ресурса,
можно напрямую ссылаться на него, что делает работу с ресурсами более
удобной и точной.
Кроме того, PlayCanvas предоставляет возможность загружать ресурсы, используя идентификатор вместе с метаданными или ключами, что помогает в сценариях с динамическим обновлением или модификацией данных. Например, если нужно загрузить модель, у которой уже есть id, можно получить её через следующую команду:
var model = app.assets.get('model_' + id);
PlayCanvas автоматически кэширует ресурсы, загруженные в рамках текущей сессии, что позволяет многократно использовать их без необходимости повторной загрузки. Когда ресурс загружается по имени, тегу или id, PlayCanvas сначала проверяет, есть ли он в кеше, и, если да, использует его напрямую.
При загрузке ресурса по имени PlayCanvas выполняет следующие шаги:
Этот механизм значительно ускоряет работу приложения, поскольку нет необходимости каждый раз запрашивать один и тот же ресурс.
В случае работы с большим количеством ресурсов, PlayCanvas предоставляет методы асинхронной загрузки. Для того чтобы не блокировать основной поток приложения, ресурсы можно загружать без задержек в работе программы.
Чтобы загрузить несколько ресурсов одновременно, можно использовать
метод load() с массивом ресурсов:
app.assets.load([texture, model, audio]);
В результате этого вызова ресурсы будут загружаться параллельно, и можно будет отслеживать их загрузку с помощью событий или коллбеков. Важно помнить, что при асинхронной загрузке нужно обрабатывать успех или ошибку загрузки, чтобы обеспечить корректную работу приложения.
PlayCanvas предоставляет механизмы для отслеживания процесса загрузки
ресурсов. С помощью событий load, error и
других, можно контролировать успешную загрузку или обработку ошибок.
var texture = app.assets.get('myTexture');
texture.on('load', function () {
console.log('Ресурс загружен');
});
texture.on('error', function () {
console.log('Ошибка при загрузке ресурса');
});
Этот код позволяет отследить, когда ресурс был успешно загружен или когда произошла ошибка при его загрузке. События позволяют гибко управлять загрузкой, например, отображать прогресс или уведомлять пользователя о статусе.
Загрузка ресурсов по имени, тегу и идентификатору является основой работы с PlayCanvas. Каждый из методов имеет свои особенности и применяется в разных контекстах. Знание того, когда и как использовать каждый из методов, позволяет эффективно управлять ресурсами и создавать динамичные веб-приложения.