Files
XCEngine/docs/api/components/game-object/game-object.md
ssdfasd 8df04c120f docs: 更新 API 文档 - 多模块修复和完善
- audio: 更新 audio-system 方法文档
- components: 新增 audio-listener/audio-source 组件方法文档,新增 remove-component 方法
- core: 更新 filewriter, types 文档
- math: 更新 box 方法文档
- memory: 更新 proxy-allocator 文档
- resources: 更新 loader 和 texture 文档
- rhi: 更新 opengl 设备、shader、swap-chain 文档
- threading: 更新 mutex 和 task-system 文档
2026-03-26 01:58:45 +08:00

4.1 KiB
Raw Blame History

GameObject

命名空间: XCEngine::Components

类型: class

头文件: XCEngine/Components/GameObject.h

描述: ECS 架构中的游戏对象实体,可附加组件并形成层级结构。

概述

GameObject 是 XCEngine ECS 架构中的实体Entity代表游戏世界中的一个个对象如角色、道具、光源等。每个 GameObject 可以通过 AddComponent 附加各种组件(如 TransformComponent、AudioSourceComponent来定义其行为和数据。GameObject 支持层级结构(父子关系)、名称查找、标签系统和生命周期管理。

类型别名

别名 类型 描述
ID uint64_t 游戏对象唯一标识符类型
INVALID_ID static constexpr ID 无效 ID 常量,值为 0

公共方法

基础信息

方法 描述
GetID 获取唯一标识符
GetUUID 获取全局唯一标识符
GetName 获取名称
SetName 设置名称
GetScene 获取所属场景

组件系统

方法 描述
GetTransform 获取变换组件
AddComponent 添加组件(模板方法)
GetComponent 获取组件(模板方法)
GetComponents 获取所有指定类型组件(模板方法)
GetComponentInChildren 在子对象中查找组件
GetComponentInParent 在父对象中查找组件
GetComponentsInChildren 获取所有子对象的指定组件
RemoveComponent 移除组件(模板方法)

层级结构

方法 描述
DetachFromParent 从父对象分离
GetParent 获取父对象
SetParent 设置父对象
GetChildCount 获取子对象数量
GetChild 获取指定索引的子对象
GetChildren 获取所有子对象
DetachChildren 分离所有子对象

激活状态

方法 描述
IsActive 检查自身激活状态
SetActive 设置激活状态
IsActiveInHierarchy 检查在层级中的激活状态

静态查找

方法 描述
Find 查找指定名称的对象
FindObjectsOfType 查找所有对象
FindGameObjectsWithTag 查找具有指定标签的对象

生命周期

方法 描述
Awake 唤醒对象
Start 开始对象
Update 每帧更新
FixedUpdate 固定频率更新
LateUpdate 晚更新
OnDestroy 销毁回调
Destroy 销毁对象

使用示例

#include <XCEngine/Components/GameObject.h>
#include <XCEngine/Components/TransformComponent.h>
#include <XCEngine/Components/AudioSourceComponent.h>

using namespace XCEngine::Components;

void CreatePlayer() {
    GameObject* player = new GameObject("Player");
    
    auto transform = player->AddComponent<TransformComponent>();
    transform->SetPosition(Vector3(0, 0, 0));
    
    auto audio = player->AddComponent<AudioSourceComponent>();
    audio->SetVolume(0.8f);
    
    player->SetParent(cameraObject);
}

void FindAndOperate() {
    GameObject* enemy = GameObject::Find("Enemy");
    if (enemy) {
        enemy->SetActive(false);
    }
}

相关文档