Возможно, и дополнительная переменная не требуется. Стоит отметить, что вы не можете получить интерфейс в сцене с FindObjectOfType
, как это было в вашем вопросе. Вы можете использовать только FindObjectOfType
с MonoBehaviour
.
Получите ваш интерфейс:
using System.Linq;
IVehicle[] vehicles = FindObjectsOfType<MonoBehaviour>().OfType<IVehicle>().ToArray();
Приведение к MonoBehaviour
, теперь вы можете получить доступ к GameObject, связанному с ним
for (int i = 0; i < vehicles.Length; i++)
GameObject vehicleGO = ((MonoBehaviour)vehicles[i]).gameObject;
Кроме того, если вы знаете имя скрипта, реализующего интерфейс, нет необходимости приводить к MonoBehaviour
. Вы можете просто привести к этому сценарию. Допустим, скрипт, который реализует интерфейс IVehicle
, называется Car
, вы бы просто сделали что-то вроде этого:
GameObject vehicleGO = ((Car)vehicles[i]).gameObject;