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

63 lines
1.5 KiB
Markdown
Raw Normal View History

2026-03-26 16:45:24 +08:00
# GameObject::Deserialize
2026-04-03 15:48:09 +08:00
从一行分号分隔的 token 流恢复当前对象的基础状态。
2026-03-26 16:45:24 +08:00
```cpp
void Deserialize(std::istream& is);
```
2026-04-03 15:48:09 +08:00
## 行为说明
2026-03-26 16:45:24 +08:00
2026-04-03 15:48:09 +08:00
当前实现会持续读取 token直到遇到
2026-03-26 16:45:24 +08:00
2026-04-03 15:48:09 +08:00
- `EOF`
- 换行
- 回车
2026-03-26 16:45:24 +08:00
2026-04-03 15:48:09 +08:00
它能识别的 key 包括:
2026-03-26 16:45:24 +08:00
2026-04-03 15:48:09 +08:00
- `name`
- `tag`
- `active`
- `layer`
- `id`
- `uuid`
- `transform`
2026-03-26 16:45:24 +08:00
2026-04-03 15:48:09 +08:00
未知 key 会被跳过,因此它对“多写了一些暂时不认识的字段”具备有限容错能力。
## Tag 与 Layer 恢复语义
- `tag` 最终走 [SetTag](SetTag.md),因此空字符串会回退到 `"Untagged"`
- `layer` 最终走 [SetLayer](SetLayer.md),因此上界仍会被限制到 `31`
按当前引擎自己生成的数据格式,这可以稳定 round-trip tag 与 `0..31` 范围内的 layer。
## 当前边界
- 不会创建普通组件
- 不会恢复父子关系
- 不会设置所属 `Scene`
- 不会触发 `Awake()``Start()` 或创建事件
- 只恢复这一个对象的基础状态
完整场景恢复应使用 [Scene::DeserializeFromString](../../Scene/Scene/DeserializeFromString.md)。
## 参数
- `is` - 输入流。
## 返回值
- 无。
## 设计提示
这个接口更像“对象基础状态的底层反序列化原语”,而不是面向最终用户的完整场景加载入口。商业引擎里把这类低层接口和场景容器级加载分开,是为了避免单对象 API 意外承担过多树结构与资源恢复责任。
2026-03-26 16:45:24 +08:00
## 相关文档
2026-04-03 15:48:09 +08:00
- [GameObject](GameObject.md)
- [Serialize](Serialize.md)
- [Scene::DeserializeFromString](../../Scene/Scene/DeserializeFromString.md)