Возможно ли получить ссылку на gameObject из интерфейса? - PullRequest
0 голосов
/ 27 июня 2018

Я реализовал интерфейс IVehicle для всех транспортных средств в моей игре и хотел бы иметь возможность получить ссылку на gameObject, к сценарию которого присоединен, без использования свойства gameObject. Возможно ли это?

Что-то вроде:

IVehicle vehicle = GameObject.FindObjectOfType(typeof(IVehicle));
GameObject vehicleGO = vehicle.gameObject;

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Возможно, и дополнительная переменная не требуется. Стоит отметить, что вы не можете получить интерфейс в сцене с 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;
0 голосов
/ 27 июня 2018

Да, есть очень простое решение. просто место

GameObject gameObject { get ; } 

как часть вашего интерфейса - все MonoBehaviours реализуют его, никаких дополнительных шагов не требуется. Я добавляю его почти ко всем моим интерфейсам в Unity, ничего не стоит и очень помогает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...