1.3 KiB
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 层级”同时更新,是商业引擎对象系统的必要一致性要求。否则编辑器看到的对象树和运行时空间层级会很容易脱节。