好吧,我已尝试过一切,但我在Unity3D中使用Google Cardboard创建了一个VR应用程序,而我正试图设置头部对象的旋转。我可以通过打印head1.transform.localRotation
并使用public CardboardHead head1;
获取Head对象来打印Head对象的旋转到控制台,但是与其他对象不同,我无法更改此旋转。
我意识到CardboardHead脚本会不断覆盖并设置Head对象的旋转:
if (trackRotation) {
var rot = Cardboard.SDK.HeadPose.Orientation;
if (target == null) {
transform.localRotation = rot;
} else {
transform.rotation = target.rotation * rot;
}
}
我甚至试图改变这些值,但是我只是想暂时改变头部物体的旋转,以便Head对象能够快速移动"在我的游戏结束后轮到一定的旋转(之后如果他们转过头,Head对象就像正常一样转动)
我只想让玩家"看起来"某处(我希望他们面对画布)但是当我尝试改变Head对象的旋转时:
head1.transform.rotation = new Quaternion(0.0f,0.0f,0.0f,0.0f);
或
head1.transform.localRotation = new Quaternion(0.0f,90.0f,70.0f,80.0f);
什么都没发生。 Head对象保持在最初设置的旋转中,似乎是(1.0,0.0,0.0,1.0)。为什么是这样?如何更改头部旋转,以便用户面向画布/指向设定方向?
答案 0 :(得分:0)
head1.transform.localRotation = new Quaternion(0.0f,90.0f,70.0f,80.0f);
我怀疑这是一个有效的四元数,更可能是一个欧拉旋转:
head1.transform.localRotation = Quaternion.Euler(90.0f,70.0f,80.0f);
您最好的拍摄方法是停用纸板,这样它就不会尝试覆盖旋转。你有一个HeadController可以根据状态激活GoogleCardboard或其他脚本。这样可以保持GoogleCardboard的清洁。