Избранное Все заметки GitHub icon Мой Github Обо мне

Решение проблемы с 3DTouch в Unity

Обновлено 24.07.2017

В Unity, даже в последних версиях есть баг с 3DTouch (Force Touch) в iOS. Заключается он в том, что левый край дисплея плохо реагирует на нажатия, если 3DTouch включен. Если его выключить — все работает как должно. В трекере этот баг есть и пока он не исправлен.

К сожалению, программно отключить 3DTouch для приложения нельзя. Хотя было бы неплохо... Но временное решение этой проблемы есть! Нужно немного «пропатчить» xCode проект.

Мы добавим обработчик тачей, который срабатывает и с включенным 3DTouch, в нем будем определять край экрана и «прокидывать» дальше начало нажатия (touchesBegan). Да, решение немного костыльное, но другого пока не нашел.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([[self traitCollection] forceTouchCapability] == UIForceTouchCapabilityAvailable) {
        CGPoint point= [touch locationInView:touch.view];
        if (point.x < 35) { // <-- тут коэффициент можно поправить
            NSSet *set = [NSSet setWithObjects:touch, nil];
            UnitySendTouchesBegin(set, NULL);
        }
    }
}

На гитхаб выложил скрипт, который автоматически патчит нужные файлы после билда. Проверен в версии 5.5.3f1.

Ссылка на Github

Поделиться
Отправить
Запинить
Популярное