Что это: Атрибут [FindAllInScene] автоматизирует поиск всех компонентов указанного типа на текущей активной сцене и автоматически назначает их в поле типа массив или List.
Как использовать: см. разделы ниже.
Пространство имен: (global)
Путь: Scripts/PropertyAttribute/InjectAttribute/FindAllInSceneAttribute.cs
Атрибут [FindAllInScene] автоматизирует поиск всех компонентов указанного типа на текущей активной сцене и автоматически назначает их в поле типа массив или List.
Это чрезвычайно полезно, когда вам нужно собрать коллекцию однотипных объектов, например, всех врагов на уровне, все точки маршрута, все интерактивные предметы и т.д., не назначая каждый из них вручную.
Поместите атрибут над полем, которое является массивом или списком (List<T>) компонентов.
using System.Collections.Generic;
using UnityEngine;
public class EnemyManager : MonoBehaviour
{
[FindAllInScene]
public List<EnemyController> allEnemies;
[FindAllInScene]
public Transform[] allWaypoints;
}Когда вы выберете GameObject с этим компонентом в инспекторе, если поле allEnemies или allWaypoints будет пустым, редактор автоматически найдет все активные EnemyController и все Transform с именем "Waypoint" (предположим) на сцене и заполнит ими соответствующий список/массив.
sortMode(FindObjectsSortMode): Необязательный параметр, который позволяет указать, как сортировать найденные объекты.FindObjectsSortMode.InstanceID(по умолчанию): Сортировка по ID экземпляра.FindObjectsSortMode.None: Без сортировки.FindObjectsSortMode.Name: Сортировка по имениGameObject.
Пример:
// Найти все точки и отсортировать их по имени
[FindAllInScene(FindObjectsSortMode.Name)]
public Transform[] sortedWaypoints;- Атрибут работает только с полями, которые являются массивами (
T[]) или списками (List<T>). - Поиск и автозаполнение происходят только в том случае, если поле пустое (не содержит элементов). Это сделано для того, чтобы случайно не перезаписать ссылки, которые были назначены вручную.