我一直致力于在Unity中编程基于头部运动旋转的图形。我在旋转方面遇到了很多问题。
Autowalk类的示例,我用它来根据用户所面对的位置找到图表需要旋转的角度:
public class AutoWalk : MonoBehaviour {
//VR head
private Transform vrHead;
//angular displacement from normal
public float xAng, yAng, zAng;
//previous values
public float xOrig, yOrig, zOrig;
// Use this for initialization
void Start () {
//Find the VR head
vrHead = Camera.main.transform;
//finding the initial direction
Vector3 orig = vrHead.TransformDirection(Vector3.forward);
xOrig = orig.x;
yOrig = orig.y;
zOrig = orig.z;
}
// Update is called once per frame
void Update () {
//find the forward direction
Vector3 forward = vrHead.TransformDirection(Vector3.forward);
float xForward = forward.x;
float yForward = forward.y;
float zForward = forward.z;
//find the angle between the initial and current direction
xAng = Vector3.Angle(new Vector3(xOrig, 0, 0), new Vector3(xForward, 0, 0));
yAng = Vector3.Angle(new Vector3(0, yOrig, 0), new Vector3(0, yForward, 0));
zAng = Vector3.Angle(new Vector3(0, 0, zOrig), new Vector3(0, 0, zForward));
//set new original angle
xOrig = xAng;
yOrig = yAng;
zOrig = zAng;
}
从那里我进入ReadingPoints类,其中包含图形(球体)和轴(伸出的立方体)上的所有点:
public class ReadingPoints : MonoBehaviour {
// Update is called once per frame
void Update () {
float xAngl = GameObject.Find("GvrMain").GetComponent<AutoWalk>().xAng;
float yAngl = GameObject.Find("GvrMain").GetComponent<AutoWalk>().yAng;
float zAngl = GameObject.Find("GvrMain").GetComponent<AutoWalk>().zAng;
if ((xAngl != prevXAngl) || (yAngl!=prevYAngl) || (zAngl!=prevZAngl))
{
//rotate depending on the angle from normal
foreach (GameObject o in allObjects)
{
o.transform.Rotate(new Vector3(xAngl, yAngl, zAngl), Space.World);
prevXAngl = xAngl;
prevYAngl = yAngl;
prevZAngl = zAngl;
}
}
allObjects,顾名思义,包含点和轴。
无论如何,运行程序时的第一个问题是图表似乎被撕裂了。 图表是如何supposed to look的(这是当o.transform.Rotate(...)被注释掉时的样子) 这是它actually looks :(另外,当我移动时图形不旋转,我不知道为什么(我以为我可能不正确地使用旋转功能但也许我也找不到正确的角度?)。对于出了什么问题的任何想法都非常感谢,谢谢!
答案 0 :(得分:0)
首先,我认为你应该开始使用四元数(https://docs.unity3d.com/ScriptReference/Quaternion.html) 其次;当您使用相机附加旋转对象时,其视线将发生变化,最终对象(图形)将不在视野范围内。如果您希望尽可能多的完整图形尽可能长时间保持在相机视野中。您应该使图形的四元数与应用于相机或其附加对象的旋转相反。
确保图表中的所有元素都是图表中心游戏对象的子元素,并且只能操纵该点。