Можно сделать таким алгоритмом:
Необходимые данные:
- Координаты X,Y точки назначения (метка на карте, к примеру)
- Координаты X,Y точки отправления (игрок)
- Velocity X,Y точки отправления (игрок)
- Матрица вращения точки отправления (игрок), или же что лучше - готовый адрес параметра Yaw точки отправления (игрок)
- Матрица вращения камеры, или же что лучше - готовый адрес параметра Yaw камеры
- Адрес параметра, сигнализирующего о прикасании/столкновении точки отправления (игрок) к какому-либо объекту
Основной процесс расчёта:
1 - Расчет дистанции до точки назначения (метка на карте, к примеру). Значение дистанции необходима лишь для своевременного автоматического отключения/прерывания опции
2 - Расчет угла между точкой отправления (игрок) и точкой назначения (метка на карте, к примеру)
3 - Изменение Velocity X,Y точки отправления (игрок) по средствам Cos,Sin угла между точкой отправления (игрок) и точкой назначения (метка на карте, к примеру)
4 - Изменение Yaw точки отправления (игрок) по средствам угла между точкой отправления (игрок) и точкой назначения (метка на карте, к примеру)
5 - Изменение Yaw камеры по средствам угла между точкой отправления (игрок) и точкой назначения (метка на карте, к примеру)
* если в игре отсутствует готовый параметр Yaw точки отправления (игрок) или камеры, то необходимо будет делать извлечение параметра Yaw из матрицы, затем изменение извлеченного параметра Yaw, затем обратная конвертация параметра Yaw в матрицу
Обход препятствий:
При касании и только на протяжении касания точки отправления (игрок) к какому-либо объекту, во избежание застревания точки отправления (игрок), сразу же после касания, начинается принудительное увеличение угла между точкой отправления (игрок) и точкой назначения (метка на карте, к примеру), при этом движение точки отправления (игрок) не прекращается. После того как касание прекратилось начинается принудительное уменьшение угла между точкой отправления (игрок) и точкой назначения (метка на карте, к примеру) до того момента пока множитель изменения угла не будет равен нулю.
Протестировал эту схему вчера в игре "theHunter: Call of the Wild", работает на 4 из 5. Пробовал устраивать игроку разные препятствия в виде камней, домов и прочего, - со всеми игрок справился успешно.