【发布时间】:2016-10-22 07:23:09
【问题描述】:
我在旋转游戏对象时遇到问题。 我能够沿另一个游戏对象的方向/角度旋转对象。 但是在第一次旋转之后,我根据源游戏对象的增量旋转来旋转游戏对象它开始向不同的方向旋转,因为我猜它已经旋转了一次。
那么有没有办法在第一次旋转后我可以重置旋转,以便它在另一个对象旋转的角度/方向上再次移动?
下面是我当前的代码,我不是数学专家,所以我可能做错了.. 所以我想要的基本事情是第二个游戏对象以与基础游戏对象旋转相同的方向旋转,但我不希望旋转值相等,旋转值不必相同,它只有以与基础游戏对象旋转相同的角度/方向旋转。 TiltAgainstObject 是源游戏对象。 该脚本附加到第二个游戏对象。
欢迎任何帮助:)。
public class Tilt : MonoBehaviour {
public GameObject TiltAgainstObject;
private float rotX;
private float rotY;
private float rotZ;
private float rotW;
private float deltaX;
private float deltaY;
private float deltaZ;
private float deltaW;
// Use this for initialization
void Start () {
rotX = TiltAgainstObject.transform.rotation.x;
rotY = TiltAgainstObject.transform.rotation.y;
rotZ = TiltAgainstObject.transform.rotation.z;
rotW = TiltAgainstObject.transform.rotation.w;
}
// Update is called once per frame
void Update () {
if(OVRInput.Get(OVRInput.Button.One))
{
deltaX = TiltAgainstObject.transform.rotation.x - rotX;
deltaY = TiltAgainstObject.transform.rotation.y - rotY;
deltaZ = TiltAgainstObject.transform.rotation.z - rotZ;
deltaW = TiltAgainstObject.transform.rotation.w - rotW;
gameObject.transform.localRotation = new Quaternion(gameObject.transform.rotation.x + deltaX,
gameObject.transform.rotation.y + deltaY,
gameObject.transform.rotation.z + deltaZ,
gameObject.transform.rotation.w + deltaW);
}
rotX = TiltAgainstObject.transform.rotation.x;
rotY = TiltAgainstObject.transform.rotation.y;
rotZ = TiltAgainstObject.transform.rotation.z;
rotW = TiltAgainstObject.transform.rotation.w;
}
}
【问题讨论】:
标签: math unity3d rotation quaternions euler-angles