Я создаю игру, в которой вы вращаете своего игрока и меняете гравитацию. проблема, которая у меня есть, состоит в том, чтобы фактически связать вращение игрока, клавиатурные вводы игрока и текущую силу тяжести.
Линия 1 (Quaternion.FromToRotation) работает полностью, пока сила тяжести не уменьшится (gravityDir (0, -1, 0)) или up (gravityDir (0, 1, 0)), и в этом случае компонент y элемента motionInput будет инвертирован.
Я не могу просто проверить, является ли он одним из два и переверните его обратно, потому что мне нужно, чтобы он мог постепенно переходить от одного значения к другому или иным образом находиться между различными углами (например, (1, 1, 0))
MoveInput is is только что был помещен в вектор (где x, ad - z).
gravityDir - это вектор для гравитации (0, -1, 0) для восходящего (0, 1, 0), когда вверх (1, 0, 0) положительное направление x и т. Д. 1013 *.
headAttach - это GameObject, который управляет головой игрока, я получаю его значение y в коде, чтобы повернуть вектор motionInput, чтобы я мог "двигаться в направление я смотрю ".
movementInput = Quaternion.FromToRotation(gravityDir, Vector3.up) * movementInput;
movementInput = Quaternion.AngleAxis(headAttach.transform.localRotation.eulerAngles.y, transform.up) * movementInput;
rb.AddForce(movementInput * 5 * movementSpeed);