Когда в 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 2

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}

Вы также можете прочитать больше об этомздесь .