具有超级手的不可重叠球体和使用 A 框架的框架物理系统

Non-overlappable sphere with super-hands and aframe-physics-system using A-Frame

我正在尝试在 A 型框架(科学)中重建电粒子(电子、中子、质子)。我正在使用 <a-sphere> 来表示带电粒子,并且我正在使用超级手来移动它。我创建了一个根据电荷吸引或排斥的自定义组件(复习:相反的电荷吸引;相似的电荷排斥)。

每个球体都是浮动的(position="0 1 0"),用户应抓住它并将其移动到另一个球体附近以查看吸引或排斥效果。

至此,吸引和排斥都起作用了。我唯一的警告是,每当我用超级手将它拖到另一个 a-sphere 时,<a-sphere> 就会重叠。我知道这是所有元素的默认行为。我一直在尝试使用 aframe-physics-system 来防止元素重叠。

因为我需要 a-sphere 悬停,所以我将 static-body 添加到它们(我注意到这并不能防止重叠)。每当我尝试使用 HTC Vive 控制器抓住它们时,控制器似乎有某种与静态物体相互作用的碰撞器,将其推来推去。如果我设法抓住它,它就会开始失控地旋转球体(可能是因为它正在与 Vive 控制器交互),然后将它发射出去(老实说,很有趣)。

我也试过将重力设置为零,但这带来了一个问题:它影响了整个场景(之后不能有正常的物理)。此外,每当球体受到另一个物体的撞击时,它会无限期地向施加力的方向移动。

当我查看示例时: https://wmurphyrd.github.io/aframe-super-hands-component/examples/physics/

我看到William用的是dynamic-body。不幸的是,这让他们陷入困境。

关于如何解决这个问题有什么想法吗?我只是想让球体不可重叠,并且允许用户在它悬停时扔它

代码如下:

<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>

结果如下:

您可以解决控制器的物理问题 body 与物体碰撞并使它们几乎不可能使用 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 获得您想要的完整行为。它适用于不响应的墙壁和地板之类的东西 物理力,因此物理引擎对它们的处理方式不同(例如,它从不对两个静态物体之间的碰撞做出反应,这就是它不防止重叠的原因)。

aframe-physics-extras结合零看sleepy 重力。它通过对所有运动和旋转应用强烈的减速来防止物体漂浮,但仍然让它们对被抛掷或与其他物体碰撞做出反应。 There is an example here.