Я новичок в Unity и делаю гусеницу по подземельям сверху вниз с движением по рельсам, как шахматная доска с нестандартным дизайном плитки. Смахивание по горизонтали вращает игрока на фиксированные 90 градусов по часовой стрелке или против часовой стрелки в зависимости от того, было ли смахивание вправо или влево, а смахивание вверх перемещает вперед к плитке перед игроком, подземелье представляет собой график, а плитки - узлы *. 1001 *
Проблема в том, что важно, чтобы камера вращалась вместе с игроком, поэтому я поместил камеру как дочернюю по отношению к объекту игрока, и она вращалась, как я и предсказывал, но затем я понял, что ось для сенсорного ввода изменилась. как если бы я повернул свой смартфон на 90 градусов, ось привязана к камере.
Я использую Camera.main.ScreenToWorldPoint
для получения первой и последней точки смахивания.
Я использую изменение x
и y
от точек касания и отпускания относительно экрана, если Input.GetTouch(0).phase
равно TouchPhase.Ended
:
deltaX = releaseX - touchX;
deltaY = releaseY - touchY;
touchX
и touchY
происходят от touchPosition
переменной который содержит первую позицию касания относительно экрана, releaseX
и touchY
исходят из переменной, которая содержит текущую позицию касания GetTouch(0)
, поскольку она изменяется при каждом u pdate.
Смахивание вверх Если deltaY
больше 1, это означает, что смахивание было выполнено хорошо, но поскольку мне не нужны очень диагональные смахивания, deltaX
должно быть между -1 и 1 допуском, если нет, свайп игнорируется.
Смахивание вправо Если deltaX
больше 1, это означает, что свайп вправо был хороший, так как мне не нужны очень диагональные смахивания, deltaY
необходимо быть в пределах от -1 до 1, в противном случае смахивание игнорируется.
Смахивание влево Если deltaX меньше -1, это означает, что смахивание влево было хорошее, так как я не хочу очень диагональные смахивания, deltaY должно быть между -1 и 1 допуском, в противном случае смахивание игнорируется.
Лог c работает, пока камера не вращается, предположим, я смахиваю вправо, так как камера вращался, его ось также вращалась, как если бы я крутил свой телефон руками, ось вращается против часовой стрелки, смахивание вправо дает эффект смахивания вниз.
Я избавился от использования ScreenToWorld
и смотрел консоль, чтобы узнать значения po ints, но код по-прежнему не работает, потому что все значения x
и y
должны быть одинаковыми для одного и того же места на экране, мировые значения изменятся, если камера перемещается, поэтому перемещение камеры приведет к беспорядку с swipe logi c, потому что это что-то, относящееся к экрану смартфона, а не к миру.
Представьте себе точку p (0,0), я думаю, мне нужно, чтобы она всегда была в центре экран, потому что я буду использовать его в качестве справочного материала для расчета типа смахивания и его правильности. Я научился это делать с помощью ScreenToWorld
и камеры. Возможно, если бы у меня была привязка в центре экрана, я мог бы использовать с ней ScreenToWorld
вместо использования камеры. Я думаю, что разработчикам тривиально иметь дело с сенсорным экраном и камерой, поэтому должен быть традиционный способ сделать это.
Как я могу решить эту проблему?