我有方向盘,由物理白日梦控制器控制(它的工作方式类似于wii控制器)。我用这段代码来做:
void Update() {
transform.localRotation = GvrController.Orientation;
transform.localRotation = new Quaternion(0.0f, 0.0f, -transform.localRotation.y, transform.localRotation.w);
}
我需要弄乱轴,因为控制器的默认位置不适合方向盘。
但是在最大旋转到左边和右边之间的3轴角度是180度。在这个范围内一切都很好,但是如果我再旋转一点,这个值会变为负值,一切都搞砸了。如何让玩家仅在此范围内旋转(3轴旋转的z轴上0-180)?编辑:主要问题是交叉0或180后的旋转值变为负值,两者相同,但顺序不同。在交叉0之后,它形成-1到-180,并且180到-180到-1。
答案 0 :(得分:3)
首先,我们需要一个我们可以实际钳制的价值。我们将从eulerAngles。z字段获取该字段(因为典型的屏幕轮绕z旋转 - 您可能需要根据控制器将其更改为其他字段):
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);
}
答案 1 :(得分:2)
试试这个:
if (transform.eulerAngles.z > 180)
transform.eulerAngles = new Vector3(transform.eulerAngles.y, transform.eulerAngles.y, 180);
else if (transform.eulerAngles.z < 0)
transform.eulerAngles = new Vector3(transform.eulerAngles.y, transform.eulerAngles.y, 0);
答案 2 :(得分:1)
如果有人想知道我找到了一个解决方案,基于Luke的回答。我意识到改变为负面的价值是好的,只有它们的错误在于它们是消极的。所以这是工作脚本:
transform.localRotation = GvrController.Orientation;
float angle = -transform.localRotation.y;
if (angle < 0.0f) {
angle = Mathf.Abs(angle);
}
transform.localRotation = new Quaternion(0.0f, 0.0f, angle, transform.localRotation.w);
答案 3 :(得分:-4)
试试这个:
If (transform.rotation > 180)
transforn.rotation = 180;