diff --git a/packages/engine/src/physics/classes/Physics.ts b/packages/engine/src/physics/classes/Physics.ts index 5325cc7486c..0dd92f4309a 100644 --- a/packages/engine/src/physics/classes/Physics.ts +++ b/packages/engine/src/physics/classes/Physics.ts @@ -541,8 +541,11 @@ const drainCollisionEventQueue = (physicsWorld: World) => (handle1: number, hand const entity1 = (rigidBody1?.userData as any)['entity'] const entity2 = (rigidBody2?.userData as any)['entity'] - const collisionComponent1 = getOptionalComponent(entity1, CollisionComponent) - const collisionComponent2 = getOptionalComponent(entity2, CollisionComponent) + setComponent(entity1, CollisionComponent) + setComponent(entity2, CollisionComponent) + + const collisionComponent1 = getComponent(entity1, CollisionComponent) + const collisionComponent2 = getComponent(entity2, CollisionComponent) if (started) { const type = isTriggerEvent ? CollisionEvents.TRIGGER_START : CollisionEvents.COLLISION_START diff --git a/packages/engine/src/physics/systems/PhysicsSystem.ts b/packages/engine/src/physics/systems/PhysicsSystem.ts index d7c2e52329c..fe34c565a14 100755 --- a/packages/engine/src/physics/systems/PhysicsSystem.ts +++ b/packages/engine/src/physics/systems/PhysicsSystem.ts @@ -32,7 +32,7 @@ import { getMutableState, getState, none } from '@etherealengine/hyperflux' import { EngineState } from '../../ecs/classes/EngineState' import { Entity } from '../../ecs/classes/Entity' -import { defineQuery, getComponent } from '../../ecs/functions/ComponentFunctions' +import { defineQuery, getComponent, removeComponent } from '../../ecs/functions/ComponentFunctions' import { SimulationSystemGroup } from '../../ecs/functions/EngineFunctions' import { defineSystem } from '../../ecs/functions/SystemFunctions' import { NetworkState } from '../../networking/NetworkState' @@ -204,6 +204,13 @@ const execute = () => { RigidBodyComponent.angularVelocity.y[entity] = angvel.y RigidBodyComponent.angularVelocity.z[entity] = angvel.z } + + for (const collisionEntity of collisionQuery()) { + const collisionComponent = getComponent(collisionEntity, CollisionComponent) + if (!collisionComponent.size) { + removeComponent(collisionEntity, CollisionComponent) + } + } } const reactor = () => {