2026-03-26 16:45:24 +08:00
|
|
|
|
# GameObject::SetActive
|
|
|
|
|
|
|
2026-04-03 16:11:48 +08:00
|
|
|
|
设置对象自身的 `activeSelf` 状态,并在必要时重新传播层级有效激活态。
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
|
|
|
|
|
```cpp
|
|
|
|
|
|
void SetActive(bool active);
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-03 16:11:48 +08:00
|
|
|
|
## 行为说明
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-04-03 16:11:48 +08:00
|
|
|
|
当前实现会先比较新旧 `m_activeSelf`:
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-04-03 16:11:48 +08:00
|
|
|
|
- 如果值没有变化,直接返回
|
|
|
|
|
|
- 如果值变化,重新计算对象当前的 `active in hierarchy`
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-04-03 16:11:48 +08:00
|
|
|
|
当“层级有效激活态”发生变化时,当前实现会:
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-04-03 16:11:48 +08:00
|
|
|
|
- 对已启用的普通组件发送 `OnEnable()` 或 `OnDisable()`
|
|
|
|
|
|
- 把变化递归传播到子对象
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-04-03 16:11:48 +08:00
|
|
|
|
## 重要边界
|
|
|
|
|
|
|
|
|
|
|
|
- 它改的是对象自己的 `activeSelf`,不是直接改父子层级
|
|
|
|
|
|
- 真正是否参与运行,还要结合 [IsActiveInHierarchy](IsActiveInHierarchy.md) 判断
|
|
|
|
|
|
- `TransformComponent` 不参与普通组件遍历,因此不会在这里收到 `OnEnable()` / `OnDisable()`
|
|
|
|
|
|
|
|
|
|
|
|
## 参数
|
|
|
|
|
|
|
|
|
|
|
|
- `active` - 新的 `activeSelf` 值。
|
|
|
|
|
|
|
|
|
|
|
|
## 返回值
|
|
|
|
|
|
|
|
|
|
|
|
- 无。
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
|
|
|
|
|
## 相关文档
|
|
|
|
|
|
|
2026-04-03 16:11:48 +08:00
|
|
|
|
- [GameObject](GameObject.md)
|
|
|
|
|
|
- [IsActive](IsActive.md)
|
|
|
|
|
|
- [IsActiveInHierarchy](IsActiveInHierarchy.md)
|
|
|
|
|
|
- [SetParent](SetParent.md)
|