PlayCanvas предоставляет разработчикам мощный инструментарий для создания 3D-приложений в браузере. Одним из важных аспектов организации и работы с объектами в сцене является использование тегов. Теги позволяют эффективно группировать объекты, упрощая поиск, фильтрацию и управление различными элементами в игровом процессе или визуализации.
Теги в PlayCanvas служат метками для объектов, позволяя отнести их к определённой категории или группе. Это может быть полезно для различных целей:
Тегирование объектов особенно полезно при большом количестве объектов в сцене, когда важно быстро находить и манипулировать только нужными объектами, не обращая внимания на остальные.
Теги могут быть назначены объектам через интерфейс редактора PlayCanvas или с помощью JavaScript-кода. Для назначения тега объекту в редакторе достаточно открыть его свойства и добавить тег в специальное поле. В случае использования кода, процесс назначения выглядит следующим образом:
var entity = new pc.Entity();
entity.tags.add('enemy');
В данном примере создаётся новый объект entity, которому
присваивается тег «enemy». Объект может иметь несколько тегов, если это
необходимо для дальнейшей фильтрации или логики работы.
Поиск объектов по тегам позволяет существенно упростить работу с
большими сценами. Для того чтобы найти все объекты с определённым тегом,
PlayCanvas предоставляет удобный метод tags.has(). Этот
метод можно использовать для проверки, обладает ли объект нужным
тегом:
if (entity.tags.has('enemy')) {
console.log('Этот объект — враг.');
}
Однако для поиска всех объектов с определённым тегом в сцене
PlayCanvas предлагает метод scene.find(). С его помощью
можно легко найти все объекты с нужным тегом:
var enemies = this.app.root.findByTag('enemy');
Этот код возвращает массив всех объектов, содержащих тег «enemy», из которых можно затем извлечь нужные данные или манипулировать объектами.
PlayCanvas позволяет фильтровать объекты по нескольким тегам, что
даёт возможность более точно управлять элементами сцены. Для этого можно
воспользоваться методом findByTags, который принимает
список тегов:
var enemiesAndItems = this.app.root.findByTags(['enemy', 'collectible']);
В данном примере будет найдено все объекты, которые одновременно имеют теги «enemy» и «collectible». Это полезно, например, для ситуации, когда необходимо собрать все объекты, принадлежащие нескольким категориям одновременно.
Удаление тегов с объектов также является важной частью работы с ними.
PlayCanvas предоставляет метод tags.remove(), который
позволяет удалить тег из объекта:
entity.tags.remove('enemy');
Этот код удаляет тег «enemy» с объекта entity. Обратите
внимание, что объект останется в сцене, просто больше не будет
ассоциирован с этим тегом.
Представим, что необходимо создать систему, в которой игрок должен избегать врагов, но при этом собирать бонусы. Сначала можно назначить каждому врагу тег «enemy», а бонусам — тег «collectible». Когда игрок входит в зону видимости объектов, программа может фильтровать все объекты с тегом «enemy» и «collectible», чтобы провести нужные действия.
var enemies = this.app.root.findByTag('enemy');
var collectibles = this.app.root.findByTag('collectible');
for (var i = 0; i < enemies.length; i++) {
// Логика взаимодействия с врагами
}
for (var j = 0; j < collectibles.length; j++) {
// Логика взаимодействия с бонусами
}
Хотя тегирование объектов значительно ускоряет процесс поиска и манипуляций с ними, важно понимать, что поиск по тегам может быть ресурсоёмким, если в сцене содержится слишком большое количество объектов. Для улучшения производительности рекомендуется:
Одним из мощных аспектов использования тегов является возможность их динамического изменения в процессе игры. Например, враг может изменить свой тег с «enemy» на «defeated» после того, как игрок его победит. Это позволяет гибко управлять объектами в игре:
enemy.tags.remove('enemy');
enemy.tags.add('defeated');
Такой подход особенно полезен при создании динамических сцен, где состояния объектов могут изменяться в зависимости от прогресса игрока.
Теги в PlayCanvas — это мощный инструмент для организации, поиска и фильтрации объектов в сценах. Они помогают создавать гибкие и эффективные системы взаимодействия с объектами, упрощают работу с большим количеством элементов, позволяют организовать код и значительно ускоряют разработку. Правильное использование тегов способствует созданию более производительных и удобных в управлении приложений.