[{"data":1,"prerenderedAt":919},["ShallowReactive",2],{"navigation":3,"/api/rigid-body/collisions":72,"/api/rigid-body/collisions-surround":914},[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":49,"body":74,"description":907,"extension":908,"links":909,"meta":910,"navigation":911,"path":50,"seo":912,"stem":51,"__hash__":913},"docs/2.api/1.rigid-body/4.collisions.md",{"type":75,"value":76,"toc":895},"minimark",[77,83,104,212,219,224,302,308,311,411,517,521,528,531,628,634,642,738,746,803,809,814,826,829,832,870,874,891],[78,79,80],"scene-wrapper",{},[81,82],"demos-collisions",{},[84,85,86,87,91,92,95,96,99,100,103],"p",{},"To start receiving collisions events, first you need to set the\n",[88,89,90],"code",{},"active-collision"," prop to our ",[88,93,94],{},"RigidBody"," (this set all our automatic\ncolliders). Then you can start listening for events in ",[88,97,98],{},"@collision-enter"," and/or\n",[88,101,102],{},"@collision-exit",".",[105,106,111],"pre",{"className":107,"code":108,"language":109,"meta":110,"style":110},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003CRigidBody activeCollision @collision-enter=\"onCollisionEnter\" @collision-exit=\"onCollisionExit\">\n  \u003CTresMesh>\n    \u003CTresTorusGeometry />\n    \u003CTresMeshNormalMaterial />\n  \u003C/TresMesh>\n\u003C/RigidBody>\n","html","",[88,112,113,159,170,182,192,202],{"__ignoreMap":110},[114,115,118,122,125,129,132,135,138,142,144,147,149,151,154,156],"span",{"class":116,"line":117},"line",1,[114,119,121],{"class":120},"sMK4o","\u003C",[114,123,94],{"class":124},"swJcz",[114,126,128],{"class":127},"spNyl"," activeCollision",[114,130,131],{"class":127}," @collision-enter",[114,133,134],{"class":120},"=",[114,136,137],{"class":120},"\"",[114,139,141],{"class":140},"sfazB","onCollisionEnter",[114,143,137],{"class":120},[114,145,146],{"class":127}," @collision-exit",[114,148,134],{"class":120},[114,150,137],{"class":120},[114,152,153],{"class":140},"onCollisionExit",[114,155,137],{"class":120},[114,157,158],{"class":120},">\n",[114,160,162,165,168],{"class":116,"line":161},2,[114,163,164],{"class":120},"  \u003C",[114,166,167],{"class":124},"TresMesh",[114,169,158],{"class":120},[114,171,173,176,179],{"class":116,"line":172},3,[114,174,175],{"class":120},"    \u003C",[114,177,178],{"class":124},"TresTorusGeometry",[114,180,181],{"class":120}," />\n",[114,183,185,187,190],{"class":116,"line":184},4,[114,186,175],{"class":120},[114,188,189],{"class":124},"TresMeshNormalMaterial",[114,191,181],{"class":120},[114,193,195,198,200],{"class":116,"line":194},5,[114,196,197],{"class":120},"  \u003C/",[114,199,167],{"class":124},[114,201,158],{"class":120},[114,203,205,208,210],{"class":116,"line":204},6,[114,206,207],{"class":120},"\u003C/",[114,209,94],{"class":124},[114,211,158],{"class":120},[213,214,216],"h2",{"id":215},"enableccd",[88,217,218],{},"enableCcd",[84,220,221,222,103],{},"You can set continuous collision detection for fast moving object, passing as a prop ",[88,223,218],{},[105,225,227],{"className":107,"code":226,"language":109,"meta":110,"style":110},"\u003CRigidBody activeCollision enableCcd @collision-enter=\"onCollisionEnter\" @collision-exit=\"onCollisionExit\">\n  \u003CTresMesh>\n    \u003CTresTorusGeometry />\n    \u003CTresMeshNormalMaterial />\n  \u003C/TresMesh>\n\u003C/RigidBody>\n",[88,228,229,262,270,278,286,294],{"__ignoreMap":110},[114,230,231,233,235,237,240,242,244,246,248,250,252,254,256,258,260],{"class":116,"line":117},[114,232,121],{"class":120},[114,234,94],{"class":124},[114,236,128],{"class":127},[114,238,239],{"class":127}," enableCcd",[114,241,131],{"class":127},[114,243,134],{"class":120},[114,245,137],{"class":120},[114,247,141],{"class":140},[114,249,137],{"class":120},[114,251,146],{"class":127},[114,253,134],{"class":120},[114,255,137],{"class":120},[114,257,153],{"class":140},[114,259,137],{"class":120},[114,261,158],{"class":120},[114,263,264,266,268],{"class":116,"line":161},[114,265,164],{"class":120},[114,267,167],{"class":124},[114,269,158],{"class":120},[114,271,272,274,276],{"class":116,"line":172},[114,273,175],{"class":120},[114,275,178],{"class":124},[114,277,181],{"class":120},[114,279,280,282,284],{"class":116,"line":184},[114,281,175],{"class":120},[114,283,189],{"class":124},[114,285,181],{"class":120},[114,287,288,290,292],{"class":116,"line":194},[114,289,197],{"class":120},[114,291,167],{"class":124},[114,293,158],{"class":120},[114,295,296,298,300],{"class":116,"line":204},[114,297,207],{"class":120},[114,299,94],{"class":124},[114,301,158],{"class":120},[213,303,305],{"id":304},"activecollisiontypes",[88,306,307],{},"activeCollisionTypes",[84,309,310],{},"You can select between the following props the type of collision that fit best your needs.",[312,313,314,327],"table",{},[315,316,317],"thead",{},[318,319,320,324],"tr",{},[321,322,323],"th",{},"Type",[321,325,326],{},"Description",[328,329,330,341,351,361,371,381,391,401],"tbody",{},[318,331,332,338],{},[333,334,335],"td",{},[88,336,337],{},"ALL",[333,339,340],{},"Enable collisions between any kind of rigid-bodies (including between two non-dynamic bodies).",[318,342,343,348],{},[333,344,345],{},[88,346,347],{},"DEFAULT",[333,349,350],{},"The default active collision types, enabling collisions between a dynamic body and another body of any type, but not enabling collisions between two non-dynamic bodies.",[318,352,353,358],{},[333,354,355],{},[88,356,357],{},"DYNAMIC_DYNAMIC",[333,359,360],{},"Enable collision-detection between a collider attached to a dynamic body and another collider attached to a dynamic body.",[318,362,363,368],{},[333,364,365],{},[88,366,367],{},"DYNAMIC_FIXED",[333,369,370],{},"Enable collision-detection between a collider attached to a dynamic body and another collider attached to a fixed body (or not attached to any body).",[318,372,373,378],{},[333,374,375],{},[88,376,377],{},"DYNAMIC_KINEMATIC",[333,379,380],{},"Enable collision-detection between a collider attached to a dynamic body and another collider attached to a kinematic body.",[318,382,383,388],{},[333,384,385],{},[88,386,387],{},"FIXED_FIXED",[333,389,390],{},"Enable collision-detection between a collider attached to a fixed body (or not attached to any body) and another collider attached to a fixed body (or not attached to any body).",[318,392,393,398],{},[333,394,395],{},[88,396,397],{},"KINEMATIC_FIXED",[333,399,400],{},"Enable collision-detection between a collider attached to a kinematic body and another collider attached to a fixed body (or not attached to any body).",[318,402,403,408],{},[333,404,405],{},[88,406,407],{},"KINEMATIC_KINEMATIC",[333,409,410],{},"Enable collision-detection between a collider attached to a kinematic body and another collider attached to a kinematic body.",[105,412,414],{"className":107,"code":413,"language":109,"meta":110,"style":110},"\u003CRigidBody\n  activeCollision\n  activeCollisionTypes=\"ALL\"\n  @collision-enter=\"onCollisionEnter\"\n  @collision-exit=\"onCollisionExit\"\n>\n  \u003CTresMesh>\n    \u003CTresTorusGeometry />\n    \u003CTresMeshNormalMaterial />\n  \u003C/TresMesh>\n\u003C/RigidBody>\n",[88,415,416,423,428,442,455,468,472,481,490,499,508],{"__ignoreMap":110},[114,417,418,420],{"class":116,"line":117},[114,419,121],{"class":120},[114,421,422],{"class":124},"RigidBody\n",[114,424,425],{"class":116,"line":161},[114,426,427],{"class":127},"  activeCollision\n",[114,429,430,433,435,437,439],{"class":116,"line":172},[114,431,432],{"class":127},"  activeCollisionTypes",[114,434,134],{"class":120},[114,436,137],{"class":120},[114,438,337],{"class":140},[114,440,441],{"class":120},"\"\n",[114,443,444,447,449,451,453],{"class":116,"line":184},[114,445,446],{"class":127},"  @collision-enter",[114,448,134],{"class":120},[114,450,137],{"class":120},[114,452,141],{"class":140},[114,454,441],{"class":120},[114,456,457,460,462,464,466],{"class":116,"line":194},[114,458,459],{"class":127},"  @collision-exit",[114,461,134],{"class":120},[114,463,137],{"class":120},[114,465,153],{"class":140},[114,467,441],{"class":120},[114,469,470],{"class":116,"line":204},[114,471,158],{"class":120},[114,473,475,477,479],{"class":116,"line":474},7,[114,476,164],{"class":120},[114,478,167],{"class":124},[114,480,158],{"class":120},[114,482,484,486,488],{"class":116,"line":483},8,[114,485,175],{"class":120},[114,487,178],{"class":124},[114,489,181],{"class":120},[114,491,493,495,497],{"class":116,"line":492},9,[114,494,175],{"class":120},[114,496,189],{"class":124},[114,498,181],{"class":120},[114,500,502,504,506],{"class":116,"line":501},10,[114,503,197],{"class":120},[114,505,167],{"class":124},[114,507,158],{"class":120},[114,509,511,513,515],{"class":116,"line":510},11,[114,512,207],{"class":120},[114,514,94],{"class":124},[114,516,158],{"class":120},[213,518,520],{"id":519},"collision-groups-and-solver-groups","Collision groups and solver groups",[522,523,525],"h3",{"id":524},"collisiongroups",[88,526,527],{},"collisionGroups",[84,529,530],{},"For more complex scenes you can select how collider interact with each other using collisionsGroups",[105,532,534],{"className":107,"code":533,"language":109,"meta":110,"style":110},"\u003CRigidBody\n  activeCollision\n  :collisionGroups=\"0x000D0004\"\n  @collision-enter=\"onCollisionEnter\"\n  @collision-exit=\"onCollisionExit\"\n>\n  \u003CTresMesh>\n    \u003CTresTorusGeometry />\n    \u003CTresMeshNormalMaterial />\n  \u003C/TresMesh>\n\u003C/RigidBody>\n",[88,535,536,542,546,560,572,584,588,596,604,612,620],{"__ignoreMap":110},[114,537,538,540],{"class":116,"line":117},[114,539,121],{"class":120},[114,541,422],{"class":124},[114,543,544],{"class":116,"line":161},[114,545,427],{"class":127},[114,547,548,551,553,555,558],{"class":116,"line":172},[114,549,550],{"class":127},"  :collisionGroups",[114,552,134],{"class":120},[114,554,137],{"class":120},[114,556,557],{"class":140},"0x000D0004",[114,559,441],{"class":120},[114,561,562,564,566,568,570],{"class":116,"line":184},[114,563,446],{"class":127},[114,565,134],{"class":120},[114,567,137],{"class":120},[114,569,141],{"class":140},[114,571,441],{"class":120},[114,573,574,576,578,580,582],{"class":116,"line":194},[114,575,459],{"class":127},[114,577,134],{"class":120},[114,579,137],{"class":120},[114,581,153],{"class":140},[114,583,441],{"class":120},[114,585,586],{"class":116,"line":204},[114,587,158],{"class":120},[114,589,590,592,594],{"class":116,"line":474},[114,591,164],{"class":120},[114,593,167],{"class":124},[114,595,158],{"class":120},[114,597,598,600,602],{"class":116,"line":483},[114,599,175],{"class":120},[114,601,178],{"class":124},[114,603,181],{"class":120},[114,605,606,608,610],{"class":116,"line":492},[114,607,175],{"class":120},[114,609,189],{"class":124},[114,611,181],{"class":120},[114,613,614,616,618],{"class":116,"line":501},[114,615,197],{"class":120},[114,617,167],{"class":124},[114,619,158],{"class":120},[114,621,622,624,626],{"class":116,"line":510},[114,623,207],{"class":120},[114,625,94],{"class":124},[114,627,158],{"class":120},[522,629,631],{"id":630},"solvergroups",[88,632,633],{},"solverGroups",[84,635,636,638,639,641],{},[88,637,633],{}," works with the same bitmask format as ",[88,640,527],{},", but controls a different step in the physics pipeline:",[105,643,645],{"className":107,"code":644,"language":109,"meta":110,"style":110},"\u003CRigidBody\n  activeCollision\n  :solverGroups=\"0x000D0004\"\n  @collision-enter=\"onCollisionEnter\"\n  @collision-exit=\"onCollisionExit\"\n>\n  \u003CTresMesh>\n    \u003CTresTorusGeometry />\n    \u003CTresMeshNormalMaterial />\n  \u003C/TresMesh>\n\u003C/RigidBody>\n",[88,646,647,653,657,670,682,694,698,706,714,722,730],{"__ignoreMap":110},[114,648,649,651],{"class":116,"line":117},[114,650,121],{"class":120},[114,652,422],{"class":124},[114,654,655],{"class":116,"line":161},[114,656,427],{"class":127},[114,658,659,662,664,666,668],{"class":116,"line":172},[114,660,661],{"class":127},"  :solverGroups",[114,663,134],{"class":120},[114,665,137],{"class":120},[114,667,557],{"class":140},[114,669,441],{"class":120},[114,671,672,674,676,678,680],{"class":116,"line":184},[114,673,446],{"class":127},[114,675,134],{"class":120},[114,677,137],{"class":120},[114,679,141],{"class":140},[114,681,441],{"class":120},[114,683,684,686,688,690,692],{"class":116,"line":194},[114,685,459],{"class":127},[114,687,134],{"class":120},[114,689,137],{"class":120},[114,691,153],{"class":140},[114,693,441],{"class":120},[114,695,696],{"class":116,"line":204},[114,697,158],{"class":120},[114,699,700,702,704],{"class":116,"line":474},[114,701,164],{"class":120},[114,703,167],{"class":124},[114,705,158],{"class":120},[114,707,708,710,712],{"class":116,"line":483},[114,709,175],{"class":120},[114,711,178],{"class":124},[114,713,181],{"class":120},[114,715,716,718,720],{"class":116,"line":492},[114,717,175],{"class":120},[114,719,189],{"class":124},[114,721,181],{"class":120},[114,723,724,726,728],{"class":116,"line":501},[114,725,197],{"class":120},[114,727,167],{"class":124},[114,729,158],{"class":120},[114,731,732,734,736],{"class":116,"line":510},[114,733,207],{"class":120},[114,735,94],{"class":124},[114,737,158],{"class":120},[522,739,741,743,744],{"id":740},"collisiongroups-vs-solvergroups",[88,742,527],{}," vs ",[88,745,633],{},[312,747,748,764],{},[315,749,750],{},[318,751,752,755,758,761],{},[321,753,754],{},"Prop",[321,756,757],{},"What it filters",[321,759,760],{},"Contact events?",[321,762,763],{},"Contact forces?",[328,765,766,785],{},[318,767,768,772,780,783],{},[333,769,770],{},[88,771,527],{},[333,773,774,775,779],{},"Whether contacts are ",[776,777,778],"strong",{},"detected"," at all (narrow-phase)",[333,781,782],{},"✗ skipped",[333,784,782],{},[318,786,787,791,798,801],{},[333,788,789],{},[88,790,633],{},[333,792,793,794,797],{},"Whether contact ",[776,795,796],{},"forces"," are applied (after narrow-phase)",[333,799,800],{},"✓ still fired",[333,802,782],{},[84,804,805,806,808],{},"Use ",[88,807,527],{}," when you want two colliders to completely ignore each other — it's more efficient because it skips both contact detection and force computation.",[84,810,805,811,813],{},[88,812,633],{}," when you still want collision events to fire (e.g. to detect a hit) but don't want physics forces applied — for example, to implement your own custom force response.",[815,816,817],"prose-note",{},[84,818,819,820],{},"For a complete explanation check ",[821,822,520],"a",{"href":823,"rel":824},"https://rapier.rs/docs/user_guides/javascript/colliders#collision-groups-and-solver-groups",[825],"nofollow",[213,827,41],{"id":828},"custom-colliders",[84,830,831],{},"If you want to detect collisions on custom colliders is the same methodology but applied to the custom collider, for example",[105,833,835],{"className":107,"code":834,"language":109,"meta":110,"style":110},"\u003CBallCollider :args=\"[1, 1, 1]\" activeCollision @collision-enter=\"onCollisionEnter\" />\n",[88,836,837],{"__ignoreMap":110},[114,838,839,841,844,847,849,851,854,856,858,860,862,864,866,868],{"class":116,"line":117},[114,840,121],{"class":120},[114,842,843],{"class":124},"BallCollider",[114,845,846],{"class":127}," :args",[114,848,134],{"class":120},[114,850,137],{"class":120},[114,852,853],{"class":140},"[1, 1, 1]",[114,855,137],{"class":120},[114,857,128],{"class":127},[114,859,131],{"class":127},[114,861,134],{"class":120},[114,863,137],{"class":120},[114,865,141],{"class":140},[114,867,137],{"class":120},[114,869,181],{"class":120},[213,871,873],{"id":872},"events","Events",[875,876,877,885],"field-group",{},[878,879,882],"field",{"name":880,"type":881},"collision-enter","(payload: { source: SourceTarget, target: SourceTarget }) => void",[84,883,884],{},"Triggered when a collider starts colliding with another collider.",[878,886,888],{"name":887,"type":881},"collision-exit",[84,889,890],{},"Triggered when a collider stops colliding with another collider.",[892,893,894],"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":110,"searchDepth":117,"depth":161,"links":896},[897,898,899,905,906],{"id":215,"depth":161,"text":218},{"id":304,"depth":161,"text":307},{"id":519,"depth":161,"text":520,"children":900},[901,902,903],{"id":524,"depth":172,"text":527},{"id":630,"depth":172,"text":633},{"id":740,"depth":172,"text":904},"collisionGroups vs solverGroups",{"id":828,"depth":161,"text":41},{"id":872,"depth":161,"text":873},"Detect and respond to collision events between rigid bodies using the activeCollision prop and collision-enter / collision-exit event listeners.","md",null,{},true,{"title":49,"description":907},"uYLt5OqDpgRwUuX09oL4VFAi_5dMY7NbxWCtccN8bQU",[915,917],{"title":45,"path":46,"stem":47,"description":916,"children":-1},"Apply forces and impulses to rigid bodies to drive physics interactions, such as making objects jump or move programmatically.",{"title":53,"path":54,"stem":55,"description":918,"children":-1},"Use sensor colliders to detect when objects enter or exit a region without generating physical contact responses.",1789116600849]