GFramework/GFramework.Ecs.Arch
gewuyou ff553977e3 chore(license): 补齐 Apache-2.0 文件头治理
- 新增许可证文件头检查与修复脚本

- 补充维护者手动修复 PR 工作流和 CI 校验

- 更新贡献指南中的文件头说明

- 补齐仓库维护源码和配置文件的许可证声明
2026-05-03 19:39:49 +08:00
..

GFramework.Ecs.Arch

GFramework.Ecs.ArchGFramework 当前 Arch ECS 集成的默认运行时实现包。

它负责把 Arch World、GFramework 的服务模块生命周期,以及 ArchSystemAdapter<T> 系统桥接到同一条采用路径中。 如果你需要的只是共享契约,请改为依赖 GFramework.Ecs.Arch.Abstractions

包定位

  • 这是运行时实现层,不是纯契约层。
  • 适合需要 UseArch(...)World 自动注册、默认模块生命周期和系统桥接基类的项目。
  • 常见场景:
    • 在架构实例上显式接入 Arch ECS
    • World 由默认模块创建并放入容器
    • 让 ECS 系统复用 ArchSystemAdapter<float> 生命周期桥接
    • 通过 IArchEcsModule.Update(deltaTime) 统一驱动 ECS 帧更新

与相邻包的关系

  • GFramework.Core
    • 提供架构、容器、生命周期和系统注册基础设施。
  • GFramework.Ecs.Arch.Abstractions
    • 提供 IArchEcsModuleIArchSystemAdapter<T> 和契约层 ArchOptions
  • GFramework.Ecs.Arch
    • 提供 UseArch(...)、默认 ArchEcsModuleWorld 注册,以及系统适配器基类与示例类型。

最小接入路径

1. 安装包

dotnet add package GeWuYou.GFramework.Ecs.Arch

2. 在 Initialize() 之前显式接入 Arch runtime

按当前实现,UseArch(...) 会把 ArchEcsModule 提前登记到 ArchitectureModuleRegistry,因此调用时机应早于 Initialize()

using GFramework.Core.Architectures;
using GFramework.Ecs.Arch.Extensions;

public sealed class GameArchitecture : Architecture
{
    public GameArchitecture() : base(new ArchitectureConfiguration())
    {
    }

    protected override void OnInitialize()
    {
        RegisterSystem<MovementSystem>();
    }
}

var architecture = new GameArchitecture()
    .UseArch(options =>
    {
        options.WorldCapacity = 2048;
        options.Priority = 50;
    });

architecture.Initialize();

3. 编写并注册系统

using Arch.Core;
using GFramework.Ecs.Arch;
using GFramework.Ecs.Arch.Components;

public sealed class MovementSystem : ArchSystemAdapter<float>
{
    private QueryDescription _query;

    protected override void OnArchInitialize()
    {
        _query = new QueryDescription()
            .WithAll<Position, Velocity>();
    }

    protected override void OnUpdate(in float deltaTime)
    {
        var frameDelta = deltaTime;

        World.Query(in _query, (ref Position position, ref Velocity velocity) =>
        {
            position.X += velocity.X * frameDelta;
            position.Y += velocity.Y * frameDelta;
        });
    }
}

4. 初始化后获取 World 与 ECS 模块

using Arch.Core;
using GFramework.Ecs.Arch.Abstractions;

var world = architecture.Context.GetService<World>();
var ecsModule = architecture.Context.GetService<IArchEcsModule>();

5. 由宿主循环驱动更新

ecsModule.Update(deltaTime);

运行时职责地图

文件 作用
Extensions/ArchExtensions.cs 通过 UseArch(...) 把默认模块注册到 ArchitectureModuleRegistry
ArchEcsModule.cs 创建并注册 World,按优先级收集 ArchSystemAdapter<float>,负责初始化、销毁和逐帧更新
ArchSystemAdapter.cs 把 GFramework 系统生命周期桥接到 Arch ISystem<T> 生命周期
ArchOptions.cs 承载 WorldCapacityEnableStatisticsPriority 这组运行时配置
Components/*.csSystems/*.cs 提供最小组件与系统示例,帮助对照查询写法和更新模式

XML 阅读入口

下表汇总当前模块 README 与源码可对照的类型级 XML 文档入口,方便先抓住 Arch ECS 集成的关键类型。

类型族 代表类型 阅读重点
装配入口 ArchExtensions UseArch(...) 的接入时机、返回值与默认模块拼装方式
运行时模块 ArchEcsModule World 注册、系统排序、销毁顺序与配置对象的消费方式
系统桥接层 ArchSystemAdapter<T> OnArchInitializeOnUpdateOnArchDispose 的生命周期桥接
示例类型 PositionVelocityMovementSystem 组件布局、查询写法与最小更新循环示例

对应文档入口