2016-05-18 5 views
2

クイック免責事項:私は非常に高度なC#ユーザーではなく、Pythonのような言語にもっと慣れているので、答えが私の目の前にあれば謝ります。段ボールを移動する

デモシーンをベースにしてGoogle Cardboardのゲームを少し作っています。私は "Trigger Pull"をチェックし、段ボールのカメラを10単位アップするコードをいくつか持っています。

  //Checks For Magnet Trigger 
     if (Cardboard.SDK.Triggered) 
     { 
      //moves player up at a rate of 10u/s 

      transform.Translate(Vector3.up * 10); 
      Debug.Log("Triggered_Head"); 
      //Tell Cardboard to maintain new position 
     } 

現在のところ、これはマグネットプルを検出するのに本当にうまく機能し、ボールボードを変換します。問題は、翻訳の直後に段ボールがベース位置にテレポートされるということです。

現在、私はUpdateHead()メソッドに挿入し、このコードを持ってCardboardHead.csから、そうのような(?):これを行う

 // Compute new head pose. 
    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 (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; 
     } 
      //Checks For Magnet Trigger 
      if (Cardboard.SDK.Triggered) 
      { 
       //moves player up at a rate of 10u/s 

       transform.Translate(Vector3.up * 10); 
       Debug.Log("Triggered_Head"); 
       //Tell Cardboard to maintain new position 
      } 
     } 

    if (OnHeadUpdated != null) { 
     OnHeadUpdated(gameObject); 
    } 
    } 

は、右のすべてを行いますが、場所がで(ほぼ瞬時に戻され次のフレーム私は仮定します)。だから私の質問です:私はどのように変換スティックを作るのですか、これを処理するための良い方法がありますか?

+0

こんにちは、Cardboard SDKのドキュメントを見てみましたが、Googleがかなりの変更を加えたようですが、使用しているバージョンは自分のサイトにもう記録されていません。だから、いくつかの一般的なアドバイス:1#位置を更新する行にデバッグポイントを置く。 2#そのコード行に来る値を確認します。どの値が間違っているかを知ると、どこに原因があるのか​​が分かります。ヘッドが移動しなくなったときに0になる「ワンタイムローテーション」ベクトルを使用するため、Cardboard SDKが位置をリセットすることがあります。 – Kamen

+0

Cardboard.SDK.Triggeredを確認する前に問題が発生しています。その位置を設定します(実際には複数回)。最初にすべての計算とチェックを行い、最後に実際の位置を設定します(必要な場合) – yes

+0

@Kamen先週のみSDKをダウンロードしました。古いバージョンを入手した場合は奇妙です。たぶん私はそれをもう一度ダウンロードしてチェックします。 PS:SDKドキュメントを私にリンクできますか?私はそれらを見つけるように見えない。 – Rexoanimation

答えて

2

申し訳ありませんが、私は動きをどのように処理するのかを考え出しました。私は今後これを理解できない人のためにここにソリューションを投稿しています。クイックメモ:SDKの最新バージョンに更新しましたが、命名以外は違いはありません。

手順1:

コントローラとして使用するオブジェクトを作成します。私はちょうどアセットパックのプロトタイプのキューブの1つを使用しましたが、動作するものは何でも(空のオブジェクトが最適です)。

2つのカメラの中心点にこのオブジェクトを配置します。

親あなたGvrMainの(コントローラオブジェクトにドラッグすることによって)コントローラオブジェクトへのオブジェクトだけでなく、あなたがプレーヤーで移動する他のコンポーネント(ガンズ、GUIの、など)

ステップ2:

コントローラオブジェクトのスクリプトを作成します。 update()メソッドで

、行を追加します:古いバージョンの

if (GvrViewer.Instance.Triggered) 
{ 
transform.Translate(Vector3.up) 
} 

Cardboard.SDK

GvrViewer.Instanceを置き換えるあなたの好みに合わせて、あなたの動きをカスタマイズし、任意の通常のユニティ機能が動作するはずです。

いくつかの欠点:

  • あなたが繰り返ししばらく(使用して、トリガーを押す必要がある)は、結束を破るようです。これはかなり簡単に修正できるようです。

  • コードスニペットは、即座に1ずつ翻訳されます。

これは私の問題を抱えていた人に役立ちます。

関連する問題