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

53 lines
1.2 KiB
Markdown

# GameObject::SetLayer
设置当前对象的 layer。
```cpp
void SetLayer(uint8_t layer);
```
## 行为说明
当前 native 实现等价于:
```cpp
m_layer = std::min<uint8_t>(layer, 31u);
```
因此对 C++ 调用者来说,精确语义是:
- 参数类型本身就是 `uint8_t`
- `0..31` 会原样保留
- 大于 `31` 的值会被写成 `31`
## 原生与托管的差异
很多文档会把它简写成“clamp 到 `[0, 31]`”。这对托管调用链是正确的,但对原生头文件还不够精确:
- 原生公开 API 没有负数输入通道,因为参数已经是 `uint8_t`
- 托管 `GameObject.layer` / `Component.layer` 先在 internal call 里把 `int32` 显式限制到 `[0, 31]`
- 然后托管层再调用这个 native setter
所以:
- C++ 视角:这是“`uint8_t` + 上界 clamp”
- C# 视角:这是完整的 `[0, 31]` clamp
## 参数
- `layer` - 目标 layer 值。
## 返回值
- 无。
## 设计提示
把 layer 收敛为 `0..31` 的轻量整数,可以让渲染过滤、对象分类、脚本暴露与场景序列化共享同一套最小稳定模型,而不必提前引入更重的 LayerMask 资产系统。
## 相关文档
- [GameObject](GameObject.md)
- [GetLayer](GetLayer.md)
- [Serialize](Serialize.md)