[{"data":1,"prerenderedAt":385},["ShallowReactive",2],{"navigation":3,"/api/rigid-body/contact-force":72,"/api/rigid-body/contact-force-surround":380},[4,22],{"title":5,"path":6,"stem":7,"children":8},"Getting Started","/getting-started","1.getting-started/1.index",[9,10,14,18],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Installation Guide","/getting-started/installation","1.getting-started/2.installation",{"title":15,"path":16,"stem":17},"Usage","/getting-started/usage","1.getting-started/3.usage",{"title":19,"path":20,"stem":21},"How it works","/getting-started/how-it-works","1.getting-started/how-it-works",{"title":23,"path":24,"stem":25,"children":26},"Api","/api","2.api",[27,30,64,68],{"title":28,"path":24,"stem":29},"Physics","2.api/index",{"title":31,"path":32,"stem":33,"children":34},"Rigid body","/api/rigid-body","2.api/1.rigid-body/index",[35,36,40,44,48,52,56,60],{"title":31,"path":32,"stem":33},{"title":37,"path":38,"stem":39},"Automatic colliders","/api/rigid-body/automatic-colliders","2.api/1.rigid-body/1.automatic-colliders",{"title":41,"path":42,"stem":43},"Custom colliders","/api/rigid-body/custom-colliders","2.api/1.rigid-body/2.custom-colliders",{"title":45,"path":46,"stem":47},"Forces","/api/rigid-body/forces","2.api/1.rigid-body/3.forces",{"title":49,"path":50,"stem":51},"Collisions","/api/rigid-body/collisions","2.api/1.rigid-body/4.collisions",{"title":53,"path":54,"stem":55},"Sensor","/api/rigid-body/sensor","2.api/1.rigid-body/5.sensor",{"title":57,"path":58,"stem":59},"Contact force","/api/rigid-body/contact-force","2.api/1.rigid-body/6.contact-force",{"title":61,"path":62,"stem":63},"Instance rigid body","/api/rigid-body/instance-rigid-body","2.api/1.rigid-body/7.instance-rigid-body",{"title":65,"path":66,"stem":67},"Joints","/api/joint","2.api/2.joint",{"title":69,"path":70,"stem":71},"UseRapier","/api/use-rapier","2.api/3.use-rapier",{"id":73,"title":57,"body":74,"description":373,"extension":374,"links":375,"meta":376,"navigation":377,"path":58,"seo":378,"stem":59,"__hash__":379},"docs/2.api/1.rigid-body/6.contact-force.md",{"type":75,"value":76,"toc":367},"minimark",[77,83,92,190,200,207,217,294,298,309,316,363],[78,79,80],"scene-wrapper",{},[81,82],"demos-contact-force",{},[84,85,86,87,91],"p",{},"Contact force events are triggered after the physics solver computes forces between two colliders. Unlike ",[88,89,90],"a",{"href":50},"collisions",", contact force events don't fire on enter/exit — they fire every simulation step while two bodies remain in contact and the accumulated force exceeds a configurable threshold.",[93,94,99],"pre",{"className":95,"code":96,"language":97,"meta":98,"style":98},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003CRigidBody activeContactForce @contact-force=\"onContactForce\">\n  \u003CTresMesh>\n    \u003CTresSphereGeometry />\n    \u003CTresMeshNormalMaterial />\n  \u003C/TresMesh>\n\u003C/RigidBody>\n","html","",[100,101,102,137,148,160,170,180],"code",{"__ignoreMap":98},[103,104,107,111,115,119,122,125,128,132,134],"span",{"class":105,"line":106},"line",1,[103,108,110],{"class":109},"sMK4o","\u003C",[103,112,114],{"class":113},"swJcz","RigidBody",[103,116,118],{"class":117},"spNyl"," activeContactForce",[103,120,121],{"class":117}," @contact-force",[103,123,124],{"class":109},"=",[103,126,127],{"class":109},"\"",[103,129,131],{"class":130},"sfazB","onContactForce",[103,133,127],{"class":109},[103,135,136],{"class":109},">\n",[103,138,140,143,146],{"class":105,"line":139},2,[103,141,142],{"class":109},"  \u003C",[103,144,145],{"class":113},"TresMesh",[103,147,136],{"class":109},[103,149,151,154,157],{"class":105,"line":150},3,[103,152,153],{"class":109},"    \u003C",[103,155,156],{"class":113},"TresSphereGeometry",[103,158,159],{"class":109}," />\n",[103,161,163,165,168],{"class":105,"line":162},4,[103,164,153],{"class":109},[103,166,167],{"class":113},"TresMeshNormalMaterial",[103,169,159],{"class":109},[103,171,173,176,178],{"class":105,"line":172},5,[103,174,175],{"class":109},"  \u003C/",[103,177,145],{"class":113},[103,179,136],{"class":109},[103,181,183,186,188],{"class":105,"line":182},6,[103,184,185],{"class":109},"\u003C/",[103,187,114],{"class":113},[103,189,136],{"class":109},[191,192,193],"prose-note",{},[84,194,195,196,199],{},"You need to set the ",[100,197,198],{},"activeContactForce"," prop to receive contact force events.",[201,202,204],"h2",{"id":203},"contactforceeventthreshold",[100,205,206],{},"contactForceEventThreshold",[84,208,209,210,212,213,216],{},"Because contact force events fire every simulation step, it's often useful to filter out low-force contacts. Set ",[100,211,206],{}," to only receive events when the total force magnitude exceeds the given value (defaults to ",[100,214,215],{},"5.0",").",[93,218,220],{"className":95,"code":219,"language":97,"meta":98,"style":98},"\u003CRigidBody activeContactForce :contact-force-event-threshold=\"100\" @contact-force=\"onContactForce\">\n  \u003CTresMesh>\n    \u003CTresSphereGeometry />\n    \u003CTresMeshNormalMaterial />\n  \u003C/TresMesh>\n\u003C/RigidBody>\n",[100,221,222,254,262,270,278,286],{"__ignoreMap":98},[103,223,224,226,228,230,233,235,237,240,242,244,246,248,250,252],{"class":105,"line":106},[103,225,110],{"class":109},[103,227,114],{"class":113},[103,229,118],{"class":117},[103,231,232],{"class":117}," :contact-force-event-threshold",[103,234,124],{"class":109},[103,236,127],{"class":109},[103,238,239],{"class":130},"100",[103,241,127],{"class":109},[103,243,121],{"class":117},[103,245,124],{"class":109},[103,247,127],{"class":109},[103,249,131],{"class":130},[103,251,127],{"class":109},[103,253,136],{"class":109},[103,255,256,258,260],{"class":105,"line":139},[103,257,142],{"class":109},[103,259,145],{"class":113},[103,261,136],{"class":109},[103,263,264,266,268],{"class":105,"line":150},[103,265,153],{"class":109},[103,267,156],{"class":113},[103,269,159],{"class":109},[103,271,272,274,276],{"class":105,"line":162},[103,273,153],{"class":109},[103,275,167],{"class":113},[103,277,159],{"class":109},[103,279,280,282,284],{"class":105,"line":172},[103,281,175],{"class":109},[103,283,145],{"class":113},[103,285,136],{"class":109},[103,287,288,290,292],{"class":105,"line":182},[103,289,185],{"class":109},[103,291,114],{"class":113},[103,293,136],{"class":109},[201,295,297],{"id":296},"events","Events",[299,300,301],"field-group",{},[302,303,306],"field",{"name":304,"type":305},"contact-force","(payload: ContactForcePayload) => void",[84,307,308],{},"Triggered every simulation step while two colliders are in contact and the force exceeds the threshold.",[310,311,313],"h3",{"id":312},"contactforcepayload",[100,314,315],{},"ContactForcePayload",[299,317,318,328,334,341,351,357],{},[302,319,322],{"name":320,"type":321},"source","SourceTarget",[84,323,324,325,327],{},"The rigid body and collider that has ",[100,326,198],{}," enabled.",[302,329,331],{"name":330,"type":321},"target",[84,332,333],{},"The other rigid body and collider involved in the contact.",[302,335,338],{"name":336,"type":337},"totalForce","Vector",[84,339,340],{},"The sum of all contact forces between the two colliders, as a 3D vector.",[302,342,345],{"name":343,"type":344},"totalForceMagnitude","number",[84,346,347,348,350],{},"The scalar magnitude of ",[100,349,336],{},".",[302,352,354],{"name":353,"type":337},"maxForceDirection",[84,355,356],{},"The direction of the largest individual contact force.",[302,358,360],{"name":359,"type":344},"maxForceMagnitude",[84,361,362],{},"The magnitude of the largest individual contact force.",[364,365,366],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":98,"searchDepth":106,"depth":139,"links":368},[369,370],{"id":203,"depth":139,"text":206},{"id":296,"depth":139,"text":297,"children":371},[372],{"id":312,"depth":150,"text":315},"Monitor and react to contact forces applied to rigid bodies during collisions.","md",null,{},true,{"title":57,"description":373},"GSNM1bFDdKvr9fFes_B_P8D9DW5SAajkk6qrxmkL3_M",[381,383],{"title":53,"path":54,"stem":55,"description":382,"children":-1},"Use sensor colliders to detect when objects enter or exit a region without generating physical contact responses.",{"title":61,"path":62,"stem":63,"description":384,"children":-1},"Simulate many repeated objects efficiently by creating one Rapier rigid body per instance of a TresInstancedMesh.",1789116600849]