Для контекста: я на 90% прошел через создание настенной системы в Unity, и мне нужна помощь в поиске 2-х векторов, которые я могу использовать для проверки и для добавления скорости к игроку, чтобы заставить их двигаться в правильное направление.
В частности, я получаю два вектора 3 справа и слева от точки контакта со стеной, затем получаю расстояние между правой точкой и предыдущей позицией игроков, а также расстояние между левой точкой и предыдущими игроками. позиция. Какая бы точка не находилась дальше от игрока, это направление, в котором мы движемся, и если вы берете эту точку и - точку контакта из нее и нормализуете ее, функция возвращает Vector3, чтобы использовать его для увеличения скорости игрока.
В настоящее время я использую эту функцию, чтобы сделать это для меня (где попадание - это точка контакта между игроком и стеной):
Vector3 CalculateWallRunDirection(Vector3 hit, Transform wall)
{
Vector3 rightPos = hit + wall.forward;
Vector3 leftPos = hit + (wall.forward * -1);
float rightDis = Vector3.Distance(rightPos, prevPlayerPos);
float leftDis = Vector3.Distance(leftPos, prevPlayerPos);
if (rightDis < leftDis)
{
return Vector3.Normalize(leftPos - hit);
}
else
{
return Vector3.Normalize(rightPos - hit);
}
}
Это хорошо работает, когда работает ... но проблема в том, что я использую Transform.forward стены, чтобы определить, где находятся эти точки, если вы пытаетесь обойти стену на передней или задней грани объект, он бросит в стену, а не вдоль него, и игрок застрянет.
TL; DR: мне нужен другой способ определения двух векторов вместо использования transform.forward + оригинальный вектор3. Если смотреть сверху вниз, проблема может отображаться как this . A - игрок, B - точка контакта со стеной. Найдите C и D:
Пожалуйста, объясните свой ответ, я не слишком хорош в математике.