1.3 KiB
1.3 KiB
GameObject::RemoveComponent
从当前对象身上移除普通组件。
该方法当前提供两个公开重载:
template<typename T> void RemoveComponent();
bool RemoveComponent(Component* component);
当前实现行为
模板重载
- 如果模板参数命中内建
TransformComponent,直接返回,不允许移除Transform - 否则按
m_components顺序找到第一个能dynamic_cast成T的普通组件 - 命中后立即
erase(it),然后返回 - 没找到时静默 no-op
指针重载
- 传入
nullptr时返回false - 传入当前
m_transform时返回false - 否则按指针地址在
m_components中查找精确同一实例 - 找到则
erase(it)并返回true - 没找到则返回
false
当前语义边界
- 两个重载都只处理普通组件,不会移除内建
Transform - 当前实现只是直接擦除
std::unique_ptr,不会先补发 OnDestroy - 模板重载只移除第一个匹配类型,不会批量移除全部同类组件
返回值
- 模板重载无返回值
- 指针重载返回是否成功移除了那一份具体组件实例