[英]How to fetch a rotation of a object while twisting it in Unity?
我目前正在Unity for Oculus中实现收音机。 玩家可以旋转旋钮以改变音量。 但是,无论是旋转角度还是旋转角度,在360度旋转时都无法返回唯一值。
下面的代码与eulerangle有相同的问题。
void Start ()
{
oldRight = Vector3.right;
angle = 0.0f;
}
void Update ()
{
Vector3 right = transform.right;
float tempAngle = Vector3.SignedAngle(oldRight,right,transform.forward);
if (right.y < oldRight.y)
{
angle += tempAngle;
}
else
{
angle -= tempAngle;
}
oldRight = right;
}
首先,我们不知道无线电游戏对象和旋钮游戏对象之间的关系是什么,这很重要。
我将举一个示例,以说明如何获得与该关系无关的旋钮旋转。
在下图中,单选框是多维数据集,其转换全部重置为0。
这是充当旋钮的圆柱体:
这里的重要部分是我旋转并放置了圆柱体,以使变换的X轴平行于立方体的X轴。
这是旋转圆柱体并报告旋转角度的脚本:
using UnityEngine;
public class RotateKnob : MonoBehaviour {
public float m_Speed;
void Update() {
if (Input.GetKey(KeyCode.RightArrow)) {
transform.Rotate(Vector3.up, Time.deltaTime * m_Speed, Space.Self);
}
if (Input.GetKey(KeyCode.LeftArrow)) {
transform.Rotate(Vector3.down, Time.deltaTime * m_Speed, Space.Self);
}
var angle = Vector3.SignedAngle(transform.right, transform.parent.right, transform.up);
Debug.Log(angle);
}
}
注意如何相对于Y轴和Space.Self
。
的angle
相对于拍摄到气缸的Y轴(它是围绕我们旋转圆柱体的轴线),从而transform.up
作为SignedAngle
OFC我们测量之间的角度第三参数,和transform.right
和transform.parent.right
(作为圆柱体的多维数据集的transform.right
)。
使用此代码,您不必担心世界上多维数据集的变换,旋转圆柱体时结果始终是相对于多维数据集的。
请记住, angle
报告的范围是[-180,180]
而不是[0,360]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.