Методы поиска: findByName, findByTag, findByGuid

Методы поиска: findByName, findByTag, findByGuid

В PlayCanvas для работы с сущностями сцены предусмотрены методы, позволяющие эффективно находить объекты по различным признакам. Использование этих методов позволяет значительно ускорить процесс разработки, обеспечивая быстрый доступ к компонентам и сущностям в проекте. Три ключевых метода поиска в PlayCanvas — это findByName, findByTag, и findByGuid. Каждый из них выполняет свою специфическую задачу и может быть полезен в различных сценариях.

Метод findByName используется для поиска сущностей по их имени. Это один из самых распространённых способов поиска объектов на сцене. В PlayCanvas каждую сущность можно назвать при её создании, и этот метод позволяет найти все сущности, соответствующие заданному имени.

Синтаксис:

var entity = this.app.root.findByName(name);
  • name — строка, представляющая имя сущности или префикс имени, которое требуется найти.
  • Возвращаемое значение — объект типа Entity или null, если сущность с таким именем не найдена.

Особенности и применение:

  • Метод чувствителен к регистру, поэтому важно точно указать имя сущности.
  • Если на сцене несколько сущностей с одинаковым именем, метод вернёт только первую найденную сущность.
  • Для поиска всех сущностей с определённым именем можно использовать цикл или findByName в комбинации с методами find или filter:
var entities = this.app.root.findByName('MyEntity');
entities.forEach(function(entity) {
    // Работа с сущностью
});

Пример использования: поиск объекта с именем “player” для выполнения определённых действий (например, изменения позиции).

var player = this.app.root.findByName('player');
if (player) {
    player.setPosition(0, 10, 0);  // Установка новой позиции
}

findByTag

Метод findByTag применяется для поиска сущностей по тегам, которые назначаются объектам на сцене. Теги являются полезным инструментом для группировки сущностей и позволяют избежать избыточных именований. В отличие от поиска по имени, который может быть менее гибким, теги позволяют работать с группами объектов, независимо от их конкретных названий.

Синтаксис:

var entities = this.app.root.findByTag(tag);
  • tag — строка или массив строк, представляющая теги для поиска.
  • Возвращаемое значение — массив объектов типа Entity, соответствующих тегу. Если сущности с таким тегом нет, возвращается пустой массив.

Особенности и применение:

  • Теги позволяют эффективно группировать сущности по функциональному признаку, например, все враги могут иметь тег “enemy”, а все препятствия — тег “obstacle”.
  • Можно искать сущности по нескольким тегам одновременно, передав массив строк.

Пример использования: поиск всех врагов на сцене для применения эффекта урона.

var enemies = this.app.root.findByTag('enemy');
enemies.forEach(function(enemy) {
    enemy.damage(10);  // Применение урона ко всем врагам
});

Дополнительно, можно использовать метод tags сущности для добавления или удаления тегов:

player.tags.add('player');  // Добавление тега
player.tags.remove('player');  // Удаление тега

findByGuid

Метод findByGuid позволяет находить сущности по их уникальному идентификатору GUID (Global Unique Identifier). Этот метод полезен, когда необходимо точно идентифицировать объект на сцене, даже если у него одинаковое имя или теги.

Синтаксис:

var entity = this.app.root.findByGuid(guid);
  • guid — строка, представляющая уникальный идентификатор сущности.
  • Возвращаемое значение — объект типа Entity или null, если сущность с таким идентификатором не найдена.

Особенности и применение:

  • GUID является уникальным для каждой сущности на сцене, что делает этот метод идеальным для поиска конкретных объектов, даже если они имеют одинаковые имена или теги.
  • Если нужно работать с сущностью, для которой заранее известен GUID, этот метод позволяет быстро её найти.

Пример использования: поиск сущности по GUID для выполнения определённых действий (например, изменения состояния).

var playerGuid = 'd41d8cd98f00b204e9800998ecf8427e';
var player = this.app.root.findByGuid(playerGuid);
if (player) {
    player.setPosition(0, 10, 0);  // Установка новой позиции для игрока
}

Сравнение методов поиска

Метод Преимущества Ограничения
findByName Лёгкость в использовании, удобен для поиска объектов по имени. Неэффективен при наличии множества объектов с одинаковым именем.
findByTag Подходит для поиска объектов по категориям и группам. Требует предварительной работы с тегами.
findByGuid Позволяет точно идентифицировать объект с уникальным идентификатором. Требует знания GUID заранее.

Методы findByName, findByTag и findByGuid являются основными инструментами для поиска объектов в PlayCanvas, каждый из которых подходит для определённых случаев в зависимости от требований проекта. Выбор метода зависит от того, нужно ли искать объекты по имени, тегам или уникальному идентификатору.