Как узнать, не существует ли конкретного проекта в проекте, чтобы он не генерировал никаких ошибок в Unity - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть строка сценария, которая получает ссылку на класс из стороннего сценария (пакет NGUI):

UIEventListener.Get(this.gameObject).onClick += expiryDateSettingsUIController.ActiveDeactiveUICaller;

Класс UIEventListener принадлежит пакету NGUI. Моя проблема в том, что я не хочу показывать какие-либо ошибки, если этот конкретный класс не существует. Как мне это сделать?. Если класс недоступен, он выдает ошибку компилятора и не позволяет мне создать исполняемый файл.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

C # - это скомпилированный язык, поэтому, прежде чем вы сможете запустить любой код, он должен быть безошибочным. Отсутствующий класс - очень серьезная ошибка компиляции. Не существует способа (в Unity или иным образом), чтобы вы могли добиться того поведения, о котором вы просили.

Однако вы можете использовать условную компиляцию. Условная компиляция, как следует из названия, - это когда вы отбираете фрагменты кода во время компиляции, поэтому эти фрагменты никогда не компилируются, и для них не возникнет ошибок компиляции. Оберните ваш код в #if / #endif как показано ниже:

#if WITH_NGUI
UIEventListener.Get(this.gameObject).onClick += expiryDateSettingsUIController.ActiveDeactiveUICaller;
#endif

Затем, чтобы этот код скомпилировался, вам нужно определить символ WITH_NGUI условной компиляции. В Unity вы можете перейти к настройкам проигрывателя, и там будет окно с именем «Определение сценариев символов», где вы можете ввести столько символов, сколько захотите. Введите WITH_NGUI в это поле, и код скомпилируется. Если у вас нет NGUI, просто удалите символ, и код больше не будет компилироваться.

Хотя это нехорошо. Вы были предупреждены.

РЕДАКТИРОВАТЬ: Вы могли бы также использовать отражение для доступа к классам, которые могут отсутствовать в вашей сборке, но это гораздо больше проблем, чем оно того стоит.

0 голосов
/ 06 ноября 2018

Вы можете использовать GetType() для отображения класса, который вы ищете:

Type mType = Type.GetType("UIEventListener");

if(mType  != null)
{
     UIEventListener.Get(this.gameObject).onClick += expiryDateSettingsUIController.ActiveDeactiveUICaller;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...