Я пытаюсь перемещать объект вокруг моего игрока в игре с боковой прокруткой 2.5d, основанной на аналоговом вводе стика. Дело в том, что мой игрок вращается в мире (с камерой, закрепленной сбоку), поэтому его локальное горизонтальное направление (transform.right) не всегда совпадает с глобальным направлением x для его локального направления вверх (transform.up). У меня это отлично работало, когда направление движения игрока было зафиксировано по оси X, установив смещение положения игроков и добавив аналог по той же оси, например:
Vector3 endPoint = new Vector3(transform.position.x + inputs.x * floraDistanceMultiplier, transform.position.y + inputs.y * floraDistanceMultiplier, transform.position.z);
но теперь, когда игрок, так сказать, находится вне оси, это, конечно, не работает.
Я могу заставить его работать по одной оси за раз:
Vector3 h = player.transform.position + player.transform.right * floraDistanceMultiplier * inputs.x;
Vector3 v = player.transform.position + player.transform.up * floraDistanceMultiplier * inputs.y;
Но не мог понять, как заставить оба вектора влиять на конечную позицию. Я предполагаю, что использование localPosition или применение x и y конечного вектора вручную не сработало, потому что x и y всегда являются глобальными, а не определяют transform.right как длинную локальную ось X.
У меня была мысль сделать лерп двумя - что почти дало успешные результаты, в том, что конечная точка правильно перемещается вокруг игрока только слева вверх, хотя и не по полному кругу вокруг игрока, а диагональ сильно ближе, чем полный степени вверх и влево.
Vector3 endPoint = Vector3.Lerp(h, v, inputs.x + inputs.y);
есть ли лучший способ сделать это в целом? Или есть какой-то способ lerp между двумя векторами, используя 2 поплавка? (аналоговый джойстик x и y) или с помощью вектора? Спасибо!