You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免cannon-es中sleep状态的刚体发生碰撞时被唤醒

cannon-es固定刚体避免碰撞唤醒解决方案

cannon-es 中 body.sleep() 触发的休眠状态默认会被任何碰撞检测事件唤醒,collisionResponse = 0 仅会关闭碰撞后的物理位移反馈,不会阻断碰撞检测的触发逻辑,因此无法阻止唤醒行为。你可以选择以下三种方案实现需求:

方案1:切换刚体类型(最稳定)

直接将刚体临时设置为静态刚体,完全不会受任何物理事件影响,需要恢复时改回原类型即可。

import { Body } from 'cannon-es'

// 固定刚体时执行
const originType = body.type
body.type = Body.STATIC

// 解除固定恢复正常物理效果时执行
body.type = originType

方案2:临时覆盖唤醒方法

如果需要保留刚体的休眠状态逻辑,仅临时禁用唤醒能力,可以重写wakeUp方法:

// 固定刚体时执行
const originWakeUp = body.wakeUp
body.sleep()
body.wakeUp = () => {}

// 解除固定时执行
body.wakeUp = originWakeUp
body.wakeUp()

方案3:关闭碰撞检测

临时修改碰撞过滤参数,让刚体不参与任何碰撞检测,自然不会触发唤醒逻辑:

// 固定刚体时执行
const originGroup = body.collisionFilterGroup
const originMask = body.collisionFilterMask
body.collisionFilterGroup = 0
body.collisionFilterMask = 0
body.sleep()

// 解除固定时执行
body.collisionFilterGroup = originGroup
body.collisionFilterMask = originMask
body.wakeUp()

内容的提问来源于stack exchange,提问作者aitor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:27:03