MCPcopy Create free account
hub / github.com/esengine/esengine / removeComponent

Method removeComponent

packages/core/src/ECS/Entity.ts:623–654  ·  view source on GitHub ↗

* @zh 移除指定的组件 * @en Remove specified component * * @param component - @zh 要移除的组件实例 @en Component instance to remove

(component: Component)

Source from the content-addressed store, hash-verified

621 * @param component - @zh 要移除的组件实例 @en Component instance to remove
622 */
623 public removeComponent(component: Component): void {
624 const componentType = component.constructor as ComponentType;
625 const registry = this.scene?.componentRegistry ?? GlobalComponentRegistry;
626
627 if (!registry.isRegistered(componentType)) {
628 return;
629 }
630
631 const bitIndex = registry.getBitIndex(componentType);
632 BitMask64Utils.clearBit(this._componentMask, bitIndex);
633 this._componentCache = null;
634
635 this.scene?.componentStorageManager?.removeComponent(this.id, componentType);
636 this.scene?.referenceTracker?.clearComponentReferences(component);
637
638 component.onRemovedFromEntity?.();
639 component.entityId = null;
640
641 if (this.scene?.eventSystem) {
642 this.scene.eventSystem.emitSync('component:removed', {
643 timestamp: Date.now(),
644 source: 'Entity',
645 entityId: this.id,
646 entityName: this.name,
647 entityTag: this.tag?.toString(),
648 componentType: getComponentTypeName(componentType),
649 component: component
650 });
651 }
652
653 this.notifyQuerySystems(componentType);
654 }
655
656 /**
657 * @zh 移除指定类型的组件

Callers 4

removeComponentByTypeMethod · 0.95
undoMethod · 0.45
executeMethod · 0.45
removeAllComponentsMethod · 0.45

Calls 10

notifyQuerySystemsMethod · 0.95
nowMethod · 0.80
getComponentTypeNameFunction · 0.50
isRegisteredMethod · 0.45
getBitIndexMethod · 0.45
clearBitMethod · 0.45
onRemovedFromEntityMethod · 0.45
emitSyncMethod · 0.45
toStringMethod · 0.45

Tested by

no test coverage detected