2017-11-29 12 views
1

A-フレーム(Science)で電気粒子(Electrons、Neutrons、Protons)を再作成しようとしています。私は<a-sphere>を使用して荷電粒子を表しています。私はそれを移動するためにスーパーハンドを使用しています。私は、料金に応じて引き寄せたり反発するカスタムコンポーネントを作成しました(リフレッシャー:反対の料金が引き付けられ、同様の料金は反発します)。Aフレームを使用したスーパーハンドとフレーム・フィジックス・システムを使用したオーバーラップ不可球体

各球体は浮動しており(位置= "0 1 0")、ユーザはそれをつかんで別の球面に近づけて、引力または反発効果を確認する必要があります。

これまでのところ、魅力と反発が働いています。私の唯一の注意点は、<a-sphere>がスーパーハンドで別のa-sphereにドラッグするたびにオーバーラップするということです。私はこれがすべての要素のデフォルト動作であることを知っています。私は要素が重複するのを防ぐためにaframe-physics-systemを使用しようとしていました。

ホバーにはa-sphereが必要なので、私はstatic-bodyを追加します(これはオーバーラップを防ぐものではないことに気付きました)。私がHTC Viveコントローラを使ってそれらをつかむときはいつも、コントローラには静的な物体とやりとりする何らかのコライダーがあり、それを押しているようです。私がそれをつかむことができれば、それは球体を制御していない状態から回転させ始めるでしょう(おそらくVive Controllerとやりとりしているからでしょう)。そしてそれを遠ざけます(正直言って面白いです)。

私は重力をゼロに設定しようとしましたが、これは問題を引き起こします。それはシーン全体に影響します(後で正常な物理を持つことはできません)。さらに、球体が別の物体に当たったときは、力が加えられた方向に無期限に移動します。私は、例から見てみると

https://wmurphyrd.github.io/aframe-super-hands-component/examples/physics/

私はウィリアムは、ダイナミック・ボディを使用していることがわかります。残念ながら、それはそれらを地面に置きます。

この問題に対処する方法はありますか?私は、球を非重複にすることを望み、のホバリング中にユーザにを投げることが許可されているようにしたい。ここで

はコードです:

<a-entity progressive-control="objects: [grabbable], [hoverable]"> 
      <a-entity id="rhand" class="right-controller"></a-entity> 
      <a-entity id="lhand" class="left-controller"></a-entity> 
</a-entity> 

    <a-sphere hoverable grabbable stretchable draggable dropppable static-body 
    material="color: #e53935;" position="0 1 0" 
    radius="0.125" id="js-electron" particle-charge="electron"> 
    </a-sphere> 

    <a-sphere hoverable grabbable stretchable draggable dropppable static-body 
    material="color: #1976d2;" position="0.5 1 0" 
    radius="0.125" id="js-proton" particle-charge="proton"> 
</a-sphere> 

は、ここでの結果です:

enter image description here

答えて

1

あなたはcollision-filterを使用してつかむために、コントローラの物理体は、物事と衝突し、不可能に近いそれらを作るの問題を解決することができますaframe-physics-extrasから:

<a-entity progressive-control="objects: [grabbable], [hoverable]"> 
      <a-entity id="rhand" class="right-controller" collision-filter="collisionForces: false"></a-entity> 
      <a-entity id="lhand" class="left-controller" collision-filter="collisionForces: false"></a-entity> 
</a-entity> 

これにより、コントローラーの本体は、他の本体を邪魔することなく掴むことができます。

しかし、あなたはstatic-bodyからあなたが望む完全な振る舞いを得ることはできないと思います。 物理力に反応しない壁や床などを対象としています。物理エンジンは、このために異なる扱いをします(たとえば、2つの静的ボディ間の衝突に反応しないため重複を防ぎません)。

の重力と組み合わせて、sleepyaframe-physics-extrasから見てください。それは、すべての動きと回転に強い減速度を適用することで、身体が浮き上がらないようにしますが、他の身体と衝突したり、衝突したりすることに反応します。 There is an example here

+0

素晴らしいウィリアム!遅く返事を申し訳ありませんが、これはまさにそれです!ありがとうございました:D:D –

関連する問題