使用框架和框架物理系统,我注意到一个问题,其中“动态物体”通过基于简单Collada的“静态物体”掉落。

所有的动态物体都应该在蓝色地板上弹跳,但是在我的情况下,除了球体之外的所有物体都从地板上掉下来。我不知道为什么。

这是jsfiddle示例:
https://jsfiddle.net/9z9e1jtk/

<a-scene fog="type: linear; color: #FFEBDE; far:195" >
    <a-assets>
        <a-asset-item id="ground" src="https://cdn.rawgit.com/7ammer/testfiles/master/aframe-ground-physics/floor.dae"></a-asset-item>
    </a-assets>

     <a-entity camera
        universal-controls
        jump-ability
        kinematic-body
        position="0 2 10">
    </a-entity>

    <a-box color="red"
        dynamic-body
        position="0 10 0"
        height="4"></a-box>

    <a-cylinder color="#ddb424"
       position="-5 10 0"
       dynamic-body></a-cylinder>

    <a-sphere color="#ddb424"
       position="5 5 0"
       dynamic-body></a-sphere>

    <a-entity static-body collada-model="#ground"></a-entity>
</a-scene>

最佳答案

Aframe 0.9.0及更高版本不再支持Collada。在aframe-extras v.6.0.0及更高版本中为需要的人提供了支持。引用:https://github.com/aframevr/aframe/issues/3793

您可以使用gltf或aframe实体作为基础。

一个例子:

<a-entity id="ground" geometry="primitive: plane; height: 500; width: 500" material=" opacity:0.0" position="0 0 0" static-body rotation="90 0 0"></a-entity>

重要的是,您使用collision-filter。这意味着您为您的实体及其应与之碰撞的每个实体声明一个组。使用group:namecollidesWith: groupname进行此操作。如果您想使其变得简单,则可以为每个应该发生碰撞的项目声明一个组。因此,您将组名设置为组1,并使其与组1冲突。

看起来像这样:
<a-entity id="ground" geometry="primitive: plane; height: 500; width: 500" material=" opacity:0.0" position="0 0 0" static-body rotation="90 0 0"
        collision-filter="group: group1; collidesWith: group1"></a-entity>

您的其他实体(例如多维数据集或gltf模型)需要获取相同的标签。
<a-box collision-filter="group: group1; collidesWith: group1"> </a-box>

为了使它更加容易,只需声明一个a-mixin元标记并将其传递给应该具有碰撞功能的每个项目:
<a-mixin id="collision" dynamic-body collision-filter="group: group1; collidesWith: group1"></a-mixin>

<a-box mixin="collision"></a-box>

<a-entity id="ground" geometry="primitive: plane; height: 500; width: 500" material=" opacity:0.0" position="0 0 0" static-body rotation="90 0 0"
            mixin="collision"></a-entity>

使用gltf模型进行相同的操作(内联示例):
<a-entity dynamic-body gltf-model="url(url/to/gltfmodel.gltf)" mixin="collision"></a-entity>

引用:https://github.com/donmccurdy/aframe-physics-system

09-16 16:25