3

こんにちは、Google Cardboard SDK を使用して立体視を有効にする Unity アプリを持っているので、VR 対応アプリを用意します。私のアプリは完全に正常に動作します。

しかし、プレーヤー設定の向きを自動向きに設定し、横向きの左と横向きの右のみを許可すると問題が発生します。横向きの左の場合、すべてが通常どおりに機能しますが、右の横向きの場合、段ボールのビューは 180 度回転します (設定ボタンは画面の下部に移動します) が、ユニティ オブジェクトは回転しません。したがって、私は逆さまのオブジェクトを持っています。

これを修正する方法はありますか?

ありがとう。

4

5 に答える 5

2

この問題は解決しました。解決策は次のとおりです (Cardboard v0.5.2 で有効)。

まず、smd で提案されているように、BaseCardboardDevice / UpdateState() で方向調整を適用する必要があります。ただし、DeviceOrientation ではなく ScreenOrientation を確認する必要があります。コードは次のとおりです。

public override void UpdateState() {

    ProcessEvents();
    GetHeadPose(headData);
    ExtractMatrix(ref headView, headData);
    headPose.SetRightHanded(headView.inverse);

    if (Screen.orientation == ScreenOrientation.LandscapeRight) {
        headPose.Set(headPose.Position, headPose.Orientation * Quaternion.Euler(0, 0, 180));                           // Workaround
}

これで向きが修正されますが、それだけでは十分ではありません。CardboardRecenter() の後で間違った方向を向いているからです。これを回避するには、CardboardHead / UpdateHead() メソッドで回転を適用する必要もあります。コードは次のようになります。

private void UpdateHead() {

    if (updated) {  // Only one update per frame, please.
      return;
    }
    updated = true;
    Cardboard.SDK.UpdateState();

    if (trackRotation) {
      var rot = Cardboard.SDK.HeadPose.Orientation;

      if (Screen.orientation == ScreenOrientation.LandscapeRight) {
        rot = Quaternion.Euler(0, 180, 0) * rot; //           << Workaround
      }

      if (target == null) {
        transform.localRotation = rot;
      } else {
        transform.rotation = target.rotation * rot;
      }
    }

    if (trackPosition) {
      Vector3 pos = Cardboard.SDK.HeadPose.Position;
      if (target == null) {
        transform.localPosition = pos;
      } else {
        transform.position = target.position + target.rotation * pos;
      }
    }

    if (OnHeadUpdated != null) {
      OnHeadUpdated(gameObject);
    }
  }
于 2016-01-19T13:54:43.473 に答える
1

追加するだけです:

headPose.Set(headPose.Position, headPose.Orientation * Quaternion.Euler(0,0,180));

BaseCardboardDevice クラスの UpdateState() の 試したデバイスをどのように回転させたかに関係なく、この問題は修正されました。Unity 5 段ボール SDK v0.5.1

于 2015-09-07T17:36:36.773 に答える