c# - Unity Cardboard Orientation 风景右倒置

标签 c# unity3d screen-orientation google-cardboard virtual-reality

您好,我有一个 Unity 应用程序,它使用 Google Cardboard SDK 来启用立体 View ,所以我将有一个支持 VR 的应用程序。我的应用程序运行得很好。

但是如果我将播放器设置方向设置为自动方向并且只允许横向左和横向,则会出现问题。当它在横向左侧时,一切正常,但当它在横向右侧时,纸板 View 将旋转 180 度(设置按钮移动到屏幕底部)但我的统一对象没有。因此我有一个颠倒的对象。

有什么方法可以解决这个问题吗?

谢谢。

最佳答案

看起来 SDK 用于读取陀螺仪的 native 代码仅针对横向左方向进行了硬编码。这可以通过编辑 BaseCardboardDevice.cs 并将 UpdateState() 的定义替换为以下代码来解决:

private Quaternion fixOrientation;

public override void UpdateState() {
  GetHeadPose(headData, Time.smoothDeltaTime);
  ExtractMatrix(ref headView, headData);
  headPose.SetRightHanded(headView.inverse);

  // Fix head pose based on device orientation (since native code assumes Landscape Left).
  switch (Input.deviceOrientation) {
    case DeviceOrientation.LandscapeLeft:
      fixOrientation = Quaternion.identity;
      return;
    case DeviceOrientation.LandscapeRight:
      fixOrientation = Quaternion.Euler(0, 0, 180);
      break;
  }
  headPose.Set(headPose.Position, headPose.Orientation * fixOrientation);
}

我建议也关闭 Cardboard 设置中的 Neck Model Scale(将其设置为 0),因为此代码不会正确显示它。

关于c# - Unity Cardboard Orientation 风景右倒置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32200052/

相关文章:

c# - 支持转换为 bool 值,但仍使用 ToString 显示 WriteLine

c# - IEnumerable 是否需要使用 foreach 循环?

c# - 如何在 Unity 中访问子游戏对象的组件?

c# - 将 DateTimePicker 值设置为 null

c# - 我无法用 Entity Framework 解释的行为

android force 在横向模式下启动 Activity

android - 更改屏幕方向时 ImageView 的奇怪行为

android - 从命令行更改 Android 设备方向

audio - FMOD完全没有声音

unity3d - 是否有可能使着色器扩展 Unity 中的另一个着色器