<pc-rigid-body>
<pc-rigid-body> 让实体参与物理模拟:static 不移动,dynamic 受重力和碰撞驱动,kinematic 由代码自行移动。
用法
- 必须直接位于
<pc-entity>、<pc-model>或<pc-node>下。 - 同实体还需要
<pc-collision>定义形状。 - 需通过
<pc-wasm>加载 ammo.js 模块。
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
angular-damping | Number(数字) | "0" | 角速度阻尼 |
angular-factor | Vector3 | "1 1 1" | X、Y、Z 角运动约束系数 |
enabled | Boolean(布尔) | "true" | 组件启用状态 |
friction | Number(数字) | "0.5" | 表面摩擦系数 |
gravity-scale | Number(数字) | "1" | 场景重力倍率,仅动态刚体生效。1 正常下落,0 忽略重力,负值向上 |
linear-damping | Number(数字) | "0" | 线速度阻尼 |
linear-factor | Vector3 | "1 1 1" | X、Y、Z 平移约束系数 |
mass | Number(数字) | "1" | 质量,单位为千克 |
restitution | Number(数字) | "0" | 弹性恢复系数,0 到 1。碰撞弹性是双方系数之积,因此另一物体也需要非零值 |
rolling-friction | Number(数字) | "0" | 滚动阻力系数 |
type | Enum(枚举) | "static" | "static" | "kinematic" | "dynamic" |
示例
动态物体落到静态地面。地面 restitution 为 1,球体为 0.9,因此保留大部分速度。可以为盒体也添加弹性,或将地面设为 0,消除全部反弹:
<pc-app>
<pc-wasm name="Ammo" glue="https://developer.playcanvas.com/assets/modules/ammo/ammo.wasm.js" wasm="https://developer.playcanvas.com/assets/modules/ammo/ammo.wasm.wasm" fallback="https://developer.playcanvas.com/assets/modules/ammo/ammo.js"></pc-wasm>
<pc-scene>
<pc-entity name="camera" position="0 2 8">
<pc-camera clear-color="#1d1f2b"></pc-camera>
</pc-entity>
<pc-entity name="light" rotation="45 30 0">
<pc-light cast-shadows normal-offset-bias="0.05" shadow-bias="0.2"></pc-light>
</pc-entity>
<pc-entity name="box-1" position="-1.5 4 0" rotation="30 10 40">
<pc-render type="box"></pc-render>
<pc-collision></pc-collision>
<pc-rigid-body type="dynamic"></pc-rigid-body>
</pc-entity>
<pc-entity name="box-2" position="0 6 0" rotation="10 40 20">
<pc-render type="box"></pc-render>
<pc-collision></pc-collision>
<pc-rigid-body type="dynamic"></pc-rigid-body>
</pc-entity>
<pc-entity name="ball" position="1.5 5 0">
<pc-render type="sphere"></pc-render>
<pc-collision type="sphere"></pc-collision>
<pc-rigid-body type="dynamic" restitution="0.9"></pc-rigid-body>
</pc-entity>
<pc-entity name="ground" position="0 -0.5 0" scale="12 1 12">
<pc-render type="box"></pc-render>
<pc-collision half-extents="6 0.5 6"></pc-collision>
<pc-rigid-body type="static" restitution="1"></pc-rigid-body>
</pc-entity>
</pc-scene>
</pc-app>
JavaScript 接口
可以通过 RigidBodyComponentElement API创建和操作元素。
component 是底层 RigidBodyComponent,就绪前为 null,其余功能可通过它访问。
另请参阅
<pc-collision>:每个刚体必需的碰撞形状。<pc-joint>:约束两个刚体。<pc-wasm>:加载 Ammo。<pc-scene>:重力。