【发布时间】:2020-02-28 03:46:21
【问题描述】:
我正在制作一个游戏,您可以在其中旋转播放器并改变重力。我遇到的问题是实际上将播放器的旋转、播放器的键盘输入和当前的重力放在一起。
第 1 行(Quaternion.FromToRotation) 工作完全正常,直到重力下降(gravityDir(0, -1, 0)) 或上升(gravityDir(0, 1, 0)),在这种情况下,movementInput 的 y 分量将倒过来。
我不能只检查它是否是两者之一并将其翻转回来,因为我需要它能够逐渐从一个值更改为另一个值,或者处于不同角度之间(例如 (1, 1, 0) 例如)
movementInput 只是被放入一个向量中(w-s 为 x,a-d 为 z)。
gravityDir 是重力(0, -1, 0)的矢量,向下 (0, 1, 0) 向上 (1, 0, 0) 为正 x 方向等。
headAttach 是一个控制玩家头部的 GameObject,我在代码中获取它的 y 值来旋转运动输入向量,这样我就可以“朝我所面对的方向移动”。
movementInput = Quaternion.FromToRotation(gravityDir, Vector3.up) * movementInput;
movementInput = Quaternion.AngleAxis(headAttach.transform.localRotation.eulerAngles.y, transform.up) * movementInput;
rb.AddForce(movementInput * 5 * movementSpeed);
【问题讨论】:
标签: c# unity3d quaternions