2017-07-07 4 views
0

VRモードに入った後、カメラがまっすぐに見えるときに完全に位置決めされるレーザ制御には、次のコードがあります。カメラの回転後のレーザ制御エンティティの位置付け

<a-entity position="0.25 1.25 -0.2" class="laser-controls"> 
    <a-entity laser-controls="hand: right" line="color: red"></a-entity></a-entity> 

問題がある:私は私の頭(カメラ)を回転させたときに、私はコントロールが(私は回転が110度よりも大きい場合に見えるいくつかのコードを持っている)スムーズに私の頭の回転に追従させたいと思います。コントローラーがカメラの一部になることは望ましくありません。私が好きなのは、Oculus Home(Gear VR)のコントローラモデルの動作です。

これを実現するにはカスタムコンポーネントがありますが、2秒ごとに呼び出されるティック機能では(そのコードはすでに動作しています)。

ありがとうございます!

答えて

0

getAttribute()を使用して、カメラコンポーネントとレーザーコントロールのエンティティの回転を確認することはどうですか?あなたができるあなたの頭部付近のコントローラーを配置したい場合は

let angle = laser.getAttribute('rotation'); 
if (camera.getAttribute('rotation').y - laser.getAttribute('rotation').y>110){ 
    angle.y++; 
    laser.setAttribute('rotation',angle); 
} else if(camera.getAttribute('rotation').y - laser.getAttribute('rotation').y<-110){ 
    angle.y--; 
    laser.setAttribute('rotation',angle); 
} 

UPDATE
:差が110度を超えていないなら、あなたはチェックすることができangle.y++/--変更の

1.Insteadそれあなたのカメラの回転に。

2しかし、滑らかにしたい場合は上記の瞬間ですが、あなたはアニメーションコンポーネントを使用することができますが、デルタ度が> 110 degの場合は、カメラコンポーネントの位置/回転に移動するアニメーション属性を設定し、開始イベントを生成し、回転チェックを無効にし、アニメーション終了イベントを待機し、チェックを有効にします。このようなビット:

init: function(){ 
    this.check = true; 
    let check = this.check; 
    animationel.addEventListener('animationend',function(){ 
     check = true; 
    }); 
},tick(){ 
    if(this.check){ 
     if(rotationCheck()){ 
      this.check = false; 
     } 
    } 
    } 
+0

ありがとう。しかし、このコードはコントローラーの回転だけを変更します。コントローラーが最初の回転でカメラのすぐ下の右手に座っていて、ヘッドを110度以上回転させるとコントローラーモデルが回転するだけですが、新しいヘッドローテーションの隣には移動しません最初の姿勢で)。私が頭を回すと、コントローラーはカメラの左側にあります。なぜなら、コントローラーはどこにいてもその場所にとどまっていたからです。 –

+0

@ChrisCar updated –

+0

https://codepen.io/anon/pen/awQRdmコードを追加しましたコントローラは、コントローラー付きGear VRでテストされたカメラ以外にはありません。私は、このコントローラの動作は多くの人がこの機能を必要とするため、コンポーネントになると考えています。 –

関連する問題