如何自定义 ================================ 基于实体组件系统,Alice 还允许使用完全非侵入式的方法为框架添加新功能。 组件即是一个结构体,仅包含数据。所以自定义组件非常简单。 自定义的系统则需要继承自 System 基类,以便重写必要的方法, 否则将无法对自定义系统进行注册。 以下是一个简单的示例,展示编写一个给予实体向上移动功能的组件和系统的全流程。 UpSys 继承自 System,并且重写了 OnUpdate 方法, 让实体的位置每次都在坐标轴上减去 UpComp 组件提供的速度,以实现物体的上升。 :: struct UpComp { float speed; }; class UpSys : System { void Before() { ALICE_INFO("Before..."); } void OnUpdate() { UpComp& up_comp = world->GetComp(); Transform& tran_comp = world->GetComp(); tran_comp.position.y -= up_comp.speed; } void After() { ALICE_INFO("After..."); } }; // 使用临时实体绑定对应组件以获取签名 Entity up_entity = m_world->CreateEntity(); m_world->AtachComp(up_entity, TransformComp{}); m_world->AtachComp(up_entity, UpComp{}); // 使用实体注册系统 m_world->RegisterSys(up_entity); // 移除临时实体 m_world->DestroyEntity(up_entity);