Appearance
地面碰撞体(WASM Bullet 静态刚体)
系统概览
通过 MmdWasmPhysicsRuntimeImpl.addRigidBodyToGlobal 把一块静态地板刚体注入所有模型的物理世界,使头发/裙子等 Dynamic 刚体在重力下落到地面时获得支撑,不再无限下坠。由 env-bridge.setGroundCollisionEnabled 驱动;运行时就绪 / 场景加载后由 applyGroundCollision() 还原持久化状态。
核心职责
ground-collision.ts— 全局静态地面刚体注入 / 移除 / 状态还原(幂等)
对外 API(节选)
isGroundCollisionEnabled()— 当前是否启用enableGroundCollision(groundY=0)— 注入静态地板(幂等;失败释放已分配资源,保持未启用态)。注:groundY 参数当前为死代码——applyGroundCollision不传、无外部调用方传非零值,地面 Y 恒为 0。disableGroundCollision()— 从所有世界移除并释放applyGroundCollision()— 按envState.groundCollisionEnabled还原
与其他子系统关系
- 驱动方:
env-bridge.setGroundCollisionEnabled - 物理 impl 经
@/core/mmd-adapter的getPhysicsImpl(runtime)访问(ADR-192 适配层网关,原散落as unknown as {physics?...}反射已收口) - 仅 WASM 运行时生效;JS 运行时空转
- 释放顺序:removeRigidBodyFromGlobal → rb.dispose → info.dispose → shape.dispose
- dispose 异常契约:
removeRigidBodyFromGlobal抛错时logWarn但不阻断后续safeDispose(try/finally,避免 impl 已销毁时资源链路断裂) - 地板半尺寸 2000m(覆盖全场景),碰撞组/掩码全开,friction 0.9