Files
XCEngine/docs/api/XCEngine/Scene/Scene/DeserializeFromString.md

1.5 KiB

Scene::DeserializeFromString

从自定义场景文本重建当前场景内容。

void DeserializeFromString(const std::string& data);

行为说明

当前实现会先清空:

  • m_gameObjects
  • m_rootGameObjects
  • m_gameObjectIDs
  • 全局 registry 里属于旧场景的对象

随后分两阶段重建:

  1. 先解析所有对象块,收集 iduuidnametagactivelayerparenttransform 和组件 payload
  2. 再创建全部 GameObject,恢复基础字段、组件和父子关系

tag 与 layer 恢复语义

  • tag 会通过 GameObject::SetTag() 写回,因此空字符串会回退到 "Untagged"
  • layer 在解析阶段会先限制到 31,再通过 SetLayer() 写回

因此按当前实现,场景 round-trip 会保留正常的 tag/layer 语义。

当前实现限制

  • 旧对象清空时不会逐个调用 DestroyGameObject,因此不会触发销毁事件,也不会对组件调用 OnDestroy()
  • 新对象不会触发 OnGameObjectCreated,也不会调用 Awake() / Start()
  • 组件创建依赖 ComponentFactoryRegistry
  • 对损坏数字字段抛出的异常当前不会在这里捕获
  • 如果父对象 ID 缺失或找不到,对象会回退为根对象

参数

  • data - 序列化后的场景文本。

返回值

  • 无。

相关文档