【发布时间】:2017-10-25 14:43:17
【问题描述】:
我想启用陀螺仪控制的相机 onButtonClick 事件,但我希望它从相机的当前位置开始。目前,当陀螺仪启用时,它会将相机移到新位置(可能是设备当前的陀螺仪旋转),而不是将其留在原处并从该点开始旋转。
希望我说得有道理,但基本上我不希望用户注意到他们在游戏中看到的任何变化(即由陀螺仪控制的摄像头,但用户不会注意到这种变化)。这是我正在使用的代码:
void Update ()
{
Quaternion attitudeFix = new Quaternion (-gyro.attitude.x, -gyro.attitude.z, -gyro.attitude.y, gyro.attitude.w);
Quaternion offsetRotation = initialGyroRotation * attitudeFix;
rotation = initialRotation * offsetRotation;
transform.rotation = rotation;
}
public void EnableGyro()
{
initialGyroRotation = Input.gyro.attitude;
initialRotation = transform.rotation;
Debug.Log("initialRotation: " + initialRotation.ToString());
Debug.Log("transform.rotation: " + transform.rotation.ToString());
Debug.Log("initialGyroRotation: " + initialGyroRotation.ToString());
}
**
编辑:这是一个屏幕,显示了当用户将设备放在脸前(纵向)并向北行驶时,我希望视图看起来如何。无论应用程序启动时设备的方向如何,当手机以纵向方向向北行驶时(再次当用户通过手机查看时),它应该是这样的。
编辑 2: 测试变得令人困惑,所以我将代码放回您的解决方案所建议的方式。仍然有一个小问题,但看起来这个脚本非常接近。主要问题是当我运行每个测试时屏幕看起来不像上面的图片,使用设备以奇怪的角度启动应用程序。启动应用程序时设备的角度并不重要,指向北方和纵向时它需要看起来像上面的屏幕。
我需要做更多的测试,并且会在一个新的/干净的项目中这样做。
【问题讨论】:
标签: c# unity3d quaternions gyroscope