Считывание жеста пользователя (Unity)
Unity.
На сцене у меня есть одна или несколько линий разной формы. Пользователь, при помощи касаний по экрану, пытается провести точно такую же линию поверх данной. Если игрок провел максимально точно и не пропустил ни одной линии, то ему дается большее кол-во очков, и наоборот. Как можно реализовать расчет точности? Какую систему и алгоритм вы можете предложить?
Мой метод.
Я пришел к тому, что вместо линии можно использовать Line Renderer с коллайдерам которые расположены у своих линий. Для начала считываем массив тачей пользователя. Для каждой точки массива,попавшей в коллайдер линии, находим вершину к которой она ближе всего расположена. Складываем все минимальные расстояния и находим среднее. К среднему прибавляем какой-либо_коэффициент*кол-во_пропущенных точек. Так мы находим число, означающее неточность пользователя. Хотелось бы услышать ваши предложения, т.к. для меня данная система считывания не кажется правильной.
Прикрепляю пример. Линии - красные, коллайдеры - желтые.
Ответы (1 шт):
Не совсем понял сути твоей идеи, но если тебе надо проверять насколько много пользователь нарисовал фигуру, то можно сделать префабы фигур, которые будут хранить в себе "участки" с коллайдерами, которые ты будешь проверять. Т.е. делаешь список этих точек, в Start() ты список заполняешь этими точками, при OnCollisionEnter2D() с точкой ты ее удаляешь и в конце подсчитываешь количество оставшихся точек. Но лично я бы сделал каждую точку со своим показателем очков с помощью размера коллайдера, хранил все в списке List<Point> Points, сам class Point имел бы поле public int Scores который определялся бы в старт от размера коллайдера и сразу же в этом классе сделать обработчик касания пальца. При касании например заносишь в новый список List<Point> TouchedPoints наши точки и в конце с помощью цикла ты в общую сумму берешь Scores из TouchedPoints и суммируешь.
Ну, или можешь не удалять точки, а создать поле bool IsTouched и помечать пройденные точки. Потом проверять каждую точку из Pointsи сразу же суммировать. На твоем скрине левый объект мне показался пистолетом, так что вот, да. Мог непонятно написать, за это извиняюсь.
