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

4.1 KiB
Raw Blame History

Scene

命名空间: XCEngine::Components

类型: class

头文件: XCEngine/Scene/Scene.h

描述: 持有一组 GameObject、驱动场景级更新,并提供层级对象树保存/加载能力的场景容器。

概述

Scene 是当前引擎里“对象集合”的所有权边界。它内部同时维护:

  • m_gameObjects,按 ID 保存 GameObject 的唯一所有权
  • m_rootGameObjects,保存根对象 ID 列表
  • m_gameObjectIDs,保存当前场景内的对象 ID 集合
  • 两个创建/销毁事件入口

Scene 负责对象集合、根节点入口、保存/加载边界和场景级更新;对象本身再负责组件与层级递归。

生命周期与所有权

查询接口返回的都是观察指针,不转移所有权。

tag 查询与序列化边界

FindGameObjectWithTag 当前会:

  • 从根对象开始
  • 对每个对象调用 CompareTag(tag)
  • 以深度优先顺序返回第一个匹配对象

场景保存/加载同样已经覆盖 tag/layer

因此场景级 tag 查询、原生对象字段和托管 GameObject.tag / layer 当前共享同一份底层状态。

当前实现边界

  • m_active 当前不会参与更新门控;即使场景 inactiveUpdate 系列接口仍会执行
  • Destructor 不会触发 OnGameObjectDestroyed(),也不会为组件调用 OnDestroy()
  • DeserializeFromString 直接重建内部状态,不经过 CreateGameObject,因此不会触发创建事件或 Awake()
  • Save / Load 打开文件失败时当前只做有限处理,不提供事务式恢复
  • SetName 只修改场景对象内部名称;如果场景由 SceneManager 管理,管理器 key 不会随之更新

线程语义

  • 当前没有锁
  • 默认应在主线程或外部同步前提下使用

公开方法

方法 说明
Constructor 构造空场景。
Destructor 销毁场景。
GetName 查询场景名称。
SetName 设置场景名称。
IsActive 查询场景 active 标志。
SetActive 设置场景 active 标志。
CreateGameObject 创建场景对象。
DestroyGameObject 销毁场景对象。
Find 按名称查找对象。
FindByID 按 ID 查找对象。
FindGameObjectWithTag 按真实 tag 递归查找第一个匹配对象。
FindObjectOfType 查找第一个匹配组件。
FindObjectsOfType 查找所有匹配组件。
GetRootGameObjects 获取根对象列表。
Update 驱动每帧更新。
FixedUpdate 驱动固定步长更新。
LateUpdate 驱动晚更新。
Save 保存到文件。
Load 从文件加载。
SerializeToString 序列化为完整场景文本。
DeserializeFromString 从完整场景文本反序列化。
OnGameObjectCreated 访问对象创建事件。
OnGameObjectDestroyed 访问对象销毁事件。

相关文档