Когда в Unity3D игровая платформа зависит от компилятивной работы?
У меня есть небольшой фрагмент кода из одного из моих проектов. Он используется в скрипте для перетаскивания меню. Скрипт прикрепляется к каждому элементу, который можно перетащить.
public void OnDrag(PointerEventData eventData){
if (isPlantLocked())
return;
#if UNITY_EDITOR
transform.position = Input.mousePosition;
#endif
#if UNITY_ANDROID
transform.position = Input.touches[0].position;
#endif
}
Я получаю исключение (каждый кадр, который я перетаскиваю), этот вход.прикосновений.Длина равна нулю, но этот кодовый регион должен использоваться только на android, а на мобильной версии все работает нормально.
И теперь мой вопрос заключается в том, как я могу избавиться от исключения и когда работает зависимость plattform?
2 ответа:
Если вы посмотрите на окно "настройки сборки", то увидите кнопку" переключить платформу", которая настроит вашу текущую платформу выполнения и запустит компиляцию соответствующих директив, даже находясь в Редакторе. Это означает, что и
UNITY_ANDROID
, иUNITY_EDITOR
могут быть одновременноtrue
, посколькуUNITY_EDITOR
означает, что вы работаете в самом приложении Unity.Поскольку вы проверяете типы ввода, и первый из них предназначен для мыши, вы можете заменить
UNITY_EDITOR
наUNITY_STANDALONE
, а затем убедиться, что когда вы тестируете в Редакторе, у вас есть правильный текущий набор платформ.Другой вариант (лучше, если вы никогда не собираетесь публиковать автономную сборку, и она предназначена только для платформ, отличных от ПК) - сначала проверить
UNITY_EDITOR
, а затем#else if
в других вариантах:#if UNITY_EDITOR transform.position = Input.mousePosition; #elif UNITY_ANDROID transform.position = Input.touches[0].position; #endif
Таким образом, вы можете быть немного более расслабленным с заменой текущей настройки платформы.
Когда вы находитесь в Редакторе, и Платформа Android выбрана в настройках сборки, оба этих кода будут работать.
Если вы не хотите выполнять определенный код Android в Редакторе, Вы можете сделать следующее:
public void OnDrag(PointerEventData eventData){ if (isPlantLocked()) return; #if UNITY_EDITOR transform.position = Input.mousePosition; #endif #if UNITY_ANDROID && !UNITY_EDITOR transform.position = Input.touches[0].position; #endif}
Вы также можете прочитать больше об этомздесь .