Unity (Android) 中的陀螺仪控制 - 设置初始偏移或使用 rotationRateUnbiased 实现一致的结果

问题描述 投票:0回答:0

我希望我的游戏控制方案假定手机在游戏开始时的位置作为陀螺仪随后旋转的默认位置。据我所知,有两种方法可以实现这一点,但它们似乎都不起作用。只要能让其中一个干活,我就心满意足了

以防万一,我的 Unity 版本是 2021.3.6f1,我正在三星 A52 上进行测试。我正在使用旧的输入管理器,因为新的输入系统包似乎不适用于我的设备。

方法 1 -

使用旋转的增量而不是实际值旋转玩家

transform.Rotate(Input.gyro.rotationRateUnbiased);

这里的问题是数字似乎很快就停止相加了,这意味着你可以将手机放在一个特定的位置,摇晃几秒钟,然后将其放回所述位置,然后发现你的角色处于与之前完全不同的旋转状态.您旋转手机的轴越多,旋转速度越快,问题就越严重。 我尝试将 rotationRateUnbiased 乘以 Time.fixedDeltaTime 或将 Input.gyro.Input.gyro.updateInterval 设置为与固定更新间隔相同的数字,但问题仍然不受影响。尝试像 rotationRate 这样的类似变量也没有什么不同。

方法 2 -

在这里我会使用实际的旋转,然后使用手机的初始旋转以某种方式调整它。我尝试使用其他用户在之前关于陀螺仪控制的问题中给出的几个示例,但没有一个产生完整的结果。从本质上讲,它可以归结为如下内容:

//when activating the gyro sensor
defaultRotation = Input.gyro.attitude; 

//in fixedUpdate
Quaternion offsetRotation = Quaternion.Inverse(defaultRotation) * Input.gyro.attitude; 
transform.rotation = initialRotationOfPlayer * offsetRotation;

不用多说了,这个方法对我根本行不通。我知道一定有办法做到这一点,但到目前为止我还没有弄明白。

unity3d quaternions gyroscope
© www.soinside.com 2019 - 2024. All rights reserved.