Решение проблемы с 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.