Загрузка ресурсов по имени, тегу, id

Одной из ключевых возможностей библиотеки 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';
});

Этот код отфильтрует только те ресурсы, которые являются текстурами.

Загрузка ресурсов по идентификатору (id)

Каждый ресурс в PlayCanvas имеет уникальный идентификатор — id. Этот идентификатор может быть полезен для доступа к ресурсу, особенно когда необходимо загрузить конкретный объект из уже загруженного набора данных.

Идентификаторы особенно полезны в случаях, когда ресурсы были заранее загружены в рамках более сложных операций, и необходимо ссылаться на них позже.

Пример использования id для загрузки ресурса:

var asset = app.assets.get(id);

Здесь id — это уникальный идентификатор ресурса, который был присвоен во время его создания или загрузки. Получив id ресурса, можно напрямую ссылаться на него, что делает работу с ресурсами более удобной и точной.

Кроме того, PlayCanvas предоставляет возможность загружать ресурсы, используя идентификатор вместе с метаданными или ключами, что помогает в сценариях с динамическим обновлением или модификацией данных. Например, если нужно загрузить модель, у которой уже есть id, можно получить её через следующую команду:

var model = app.assets.get('model_' + id);

Загрузка и кэширование ресурсов

PlayCanvas автоматически кэширует ресурсы, загруженные в рамках текущей сессии, что позволяет многократно использовать их без необходимости повторной загрузки. Когда ресурс загружается по имени, тегу или id, PlayCanvas сначала проверяет, есть ли он в кеше, и, если да, использует его напрямую.

При загрузке ресурса по имени PlayCanvas выполняет следующие шаги:

  1. Проверка наличия ресурса в локальном кеше.
  2. Если ресурс найден в кеше, возвращается его копия.
  3. Если ресурс не найден, он загружается с сервера или из указанного источника, после чего добавляется в кэш.

Этот механизм значительно ускоряет работу приложения, поскольку нет необходимости каждый раз запрашивать один и тот же ресурс.

Асинхронная загрузка ресурсов

В случае работы с большим количеством ресурсов, 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. Каждый из методов имеет свои особенности и применяется в разных контекстах. Знание того, когда и как использовать каждый из методов, позволяет эффективно управлять ресурсами и создавать динамичные веб-приложения.