Files
XCEngine/docs/api/XCEngine/Components/GameObject/RemoveComponent.md

1.3 KiB

GameObject::RemoveComponent

从当前对象身上移除普通组件。

该方法当前提供两个公开重载:

template<typename T> void RemoveComponent();
bool RemoveComponent(Component* component);

当前实现行为

模板重载

  • 如果模板参数命中内建 TransformComponent,直接返回,不允许移除 Transform
  • 否则按 m_components 顺序找到第一个能 dynamic_castT 的普通组件
  • 命中后立即 erase(it),然后返回
  • 没找到时静默 no-op

指针重载

  • 传入 nullptr 时返回 false
  • 传入当前 m_transform 时返回 false
  • 否则按指针地址在 m_components 中查找精确同一实例
  • 找到则 erase(it) 并返回 true
  • 没找到则返回 false

当前语义边界

  • 两个重载都只处理普通组件,不会移除内建 Transform
  • 当前实现只是直接擦除 std::unique_ptr,不会先补发 OnDestroy
  • 模板重载只移除第一个匹配类型,不会批量移除全部同类组件

返回值

  • 模板重载无返回值
  • 指针重载返回是否成功移除了那一份具体组件实例

相关文档