Чтобы найти все объекты с определенным скриптом в Unity, вы можете использовать различные методы. Вот некоторые часто используемые подходы:
Метод 1: использование FindObjectsOfType
using UnityEngine;
ScriptType[] objectsWithScript = FindObjectsOfType<ScriptType>();
Этот метод использует функцию FindObjectsOfType, которая возвращает массив всех активных объектов в сцене, к которым прикреплен указанный скрипт. Замените ScriptTypeфактическим именем искомого скрипта.
Метод 2: использование GameObject.FindObjectsOfType
using UnityEngine;
ScriptType[] objectsWithScript = GameObject.FindObjectsOfType<ScriptType>();
Подобно предыдущему методу, этот подход использует GameObject.FindObjectsOfTypeдля получения всех объектов с указанным прикрепленным скриптом.
Метод 3: использование GameObject.FindWithTag и GetComponent
using UnityEngine;
GameObject[] objectsWithScript = GameObject.FindGameObjectsWithTag("YourTag");
List<GameObject> filteredObjects = new List<GameObject>();
foreach (GameObject obj in objectsWithScript)
{
if (obj.GetComponent<ScriptType>() != null)
{
filteredObjects.Add(obj);
}
}
В этом методе вы сначала находите все игровые объекты с определенным тегом, используя GameObject.FindGameObjectsWithTag. Затем вы перебираете каждый объект и проверяете, прикреплен ли к нему нужный скрипт, используя GetComponent. Объекты со скриптом добавляются в отфильтрованный список.
Метод 4: использование специального диспетчера сценариев
Вы можете создать собственный диспетчер сценариев, который отслеживает все объекты с помощью определенного сценария. Этот подход требует ручной регистрации и отмены регистрации объектов по мере их создания или уничтожения. Вот упрощенный пример:
using UnityEngine;
using System.Collections.Generic;
public class ScriptManager : MonoBehaviour
{
private static List<ScriptType> objectsWithScript = new List<ScriptType>();
public static void RegisterObject(ScriptType obj)
{
objectsWithScript.Add(obj);
}
public static void UnregisterObject(ScriptType obj)
{
objectsWithScript.Remove(obj);
}
public static List<ScriptType> GetObjectsWithScript()
{
return objectsWithScript;
}
}
В этом методе вы создаете статический список в классе пользовательского менеджера сценариев, чтобы отслеживать все объекты с нужным сценарием. Каждый объект со сценарием регистрируется при создании и отменяет регистрацию при уничтожении.