Я создаю fps-игру в единстве и решил не использовать включенный скрипт First Person Controller, чтобы уменьшить сложность.Объект камеры будет постоянно установлен в положение игроков и может вращаться.Я создал скрипт, содержащий следующий код для движения:
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
Vector2 rotation = new Vector2(
Mathf.Cos(cam.transform.eulerAngles.y * deg2rad), (Mathf.Sin(cam.transform.eulerAngles.y * deg2rad))
);
rb.velocity = (
new Vector3(
(-rotation.x * h * speed) + (rotation.y * v * speed),
rb.velocity.y,
(-rotation.y * h * speed) + (-rotation.x * v * speed)
)
);
Когда я тестирую игру, движение будет правильным вдоль оси x в обоих направлениях, но это необычно, когда вращение игрока у становитсячто-то иное, чем выравнивание по оси абсцисс (например, перемещение игрока назад приведет к его перемещению вперед и обратно).
Я открыт для альтернативы, кроме использования функций триггера для движения, так как яуже использовали transform.forward и transform.right, но они не работали полностью.