我想通过游戏手柄修改相机对象的旋转。我有在编辑器中工作的代码,但在 iOS 上不工作。(但是,它看起来正在工作,但在第二帧被 VROne 代码推回)。
我能够使用 Rift 来完成这项工作,但还不能使用 VROne 解决这个问题。对于 Rift,我为 GamePad 操纵杆改变的旋转添加了一个“偏移量”。偏移量被计算到最终的旋转中,其中还包括玩家的视线方向。
知道我将修改代码的哪一部分以使其与 VROne sdk 一起正常工作吗?
以防万一这会对某人有所帮助,我能够以更简单的方式解决它。
VrOneSDK 对象是我使用游戏手柄旋转的对象的子对象。然后在'vrHeadTracking.cs'中我只是改变了
transform.rotation = Quaternion.Inverse(initialRotation) * rot;
至
transform.localRotation = Quaternion.Inverse(initialRotation) * rot;
这样头部跟踪相对于我的父对象的旋转。
如果您想使用自己的 GameRotation 角度(来自游戏手柄),这些值可能会被集成的 HeadTracking 覆盖。您是否尝试过在 VROneSDKHead 对象中禁用 VR 头部跟踪脚本?
HeadTracking 角度在 HeadTrackingIOS 类中处理,该类调用本机静态库。您可以尝试将您的游戏手柄偏移添加到第 43 行返回的四元数。
希望这会有所帮助,让我们知道它是否有效!
编辑:没关系,下面的代码在编辑器中工作,但在 iOS 设备上,相机仍然强制前进。我会尝试另一个答案。
酷 - 上面的答案可能有效。这听起来像我在寻找什么。
然而,根据 Unity 论坛上的建议,我实现了这个解决方案:首先,我将 VROne 对象设为另一个空游戏对象的子对象,localPosition 为 0,0,0。
在旋转时,我旋转父级,但首先确保父级与子级的位置相同,然后子级 localPosition 为 0,0,0 - - 现在子级正在进行物理运动,父级进行旋转. 我不确定将角色控制器移动到父级是否会起作用或在 SDK 中使其他一些时髦的东西,但这似乎目前可行。
if (RightStickX.Value != 0)
{
transform.position = childObject.transform.position;
childObject.transform.localPosition = Vector3(0,0,0);
transform.eulerAngles.y += RightStickX.Value * rotationSpeed * Time.deltaTime;
}