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

1.3 KiB

GameObject::SetParent

修改对象的父节点,并同步场景根列表、Transform 层级与激活态传播。

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

void SetParent(GameObject* parent);
void SetParent(GameObject* parent, bool worldPositionStays);

重载关系

  • SetParent(parent) 当前等价于 SetParent(parent, true)
  • worldPositionStays 会继续传给 TransformComponent::SetParent(...)

行为说明

当前实现会处理以下事情:

  • 若目标父节点与当前父节点相同,直接返回
  • parent == this,直接返回
  • 从旧父节点子列表或场景根列表中移除当前对象
  • 更新 m_parent
  • 加入新父节点的子列表,或重新进入场景根列表
  • 调用 GetTransform()->SetParent(...)
  • 如有需要,重新传播 active in hierarchy 变化

参数

  • parent - 新父对象;传 nullptr 表示把对象变成根对象。
  • worldPositionStays - 是否尽量保持当前世界空间变换。

返回值

  • 无。

设计提示

把“对象层级”和“Transform 层级”同时更新,是商业引擎对象系统的必要一致性要求。否则编辑器看到的对象树和运行时空间层级会很容易脱节。

相关文档