Aframe动态身体通过collada静体地板坠落

时间:2016-12-11 15:41:52

标签: javascript game-physics aframe

使用aframe和aframe-physics-system我已经注意到了一个问题,其中" dynamic-body"正在通过一个简单的基于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>

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我知道我要晚2年了,但请尝试在球体内应用辅助平面以充当更好的物理对撞机。我将使平面大于球体,然后将不透明度设置为0%。