我有一个由物理 Daydream Controller 控制的方向盘(它的工作原理类似于 Wii Controller )。我使用这段代码来做到这一点:
void Update() {
transform.localRotation = GvrController.Orientation;
transform.localRotation = new Quaternion(0.0f, 0.0f, -transform.localRotation.y, transform.localRotation.w);
}
我需要弄乱轴,因为 Controller 的默认位置不适合方向盘。
但在 3 轴中,最大向左和向右旋转之间的角度为 180 度。在这个范围内,一切都很好,但如果我再旋转一点,这个值就会变成负数,一切都会变得一团糟。我该怎么做才能让玩家只在这个范围内旋转(3 轴旋转的 z 轴上的 0 - 180)?
编辑:主要问题是旋转值在超过 0 或 180 后变为负值,两者相同,但顺序不同。越过 0 后,它从 -1 到 -180,对于 180,它从 -180 到 -1。
最佳答案
首先,我们需要一个可以实际限制的值。我们将从 eulerAngles 中得到它.z 字段(因为典型的屏幕滚轮围绕 z 旋转 - 您可能需要根据 Controller 将其更改为其他字段):
void Update() {
// Get the angle:
float angle = GvrController.Orientation.eulerAngles.z;
// The magic - clamp it:
if(angle < -180f){
angle = -180f;
}
else if(angle > 180f){
angle = 180f;
}
// Apply it as a new rotation:
transform.localRotation = Quaternion.Euler(0f,0f,angle);
}
关于c# - 如何限制物体旋转到一定程度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41265177/