当前位置: 首页 > news >正文

Unity Dots

文章目录

    • 什么是Dots
    • DOTS的优势
    • ECS(实体组件系统)
    • Job System作业系统
    • Burst编译器
    • 最后

什么是Dots

DOTS(Data-Oriented Technology Stack)是Unity推出的一种用于开发高性能游戏和应用的数据导向技术栈,包含三大核心组件:

ECS架构:实体(Entity)+ 组件(Component)+ 系统(System)的分离式设计
Job System:提供在多个 CPU 核心上并行运行游戏代码的方法
Burst编译器:将C#代码编译为优化的机器码

这些使得 Unity 能够生成高度优化的代码。
在这里插入图片描述

DOTS的优势

1.性能优化:传统的面向对象编程模型可能会导致性能瓶颈,尤其是在需要处理大量相似实体(如敌人、项目、粒子等)时。DOTS 通过将数据放在内存中以连续的方式存储并通过实体组件系统(ECS)进行处理,显著提高了内存访问效率和 CPU 利用率。

2.提高并行性:DOTS 中的 Job System 允许开发者轻松地将任务并行化,这样可以充分利用现代CPU多核处理器的优势。通过将游戏逻辑拆分成多个独立的任务,能够同时在多个线程中执行,极大地提高了计算性能。

2.可扩展性:随着游戏复杂性的增加,管理和处理大量实体的需求也随之提高。DOTS 的设计理念使其在处理大规模数据时更加高效,能够轻松支持成百上千的实体而不影响性能。

4.组件化设计:ECS 的组件化模型通过将数据与逻辑分开,提供了更灵活和可重用的代码结构。开发者可以独立修改和组合不同的组件,简化维护和扩展的过程。

5.优化内存使用:DOTS 鼓励以数据驱动的方式组织代码,更少依赖于复杂的对象引用。这样做有助于减少内存碎片,提高内存的整体利用效率。

示例:传统MonoBehaviour在10,000+对象场景下帧率可能低于30FPS,DOTS可实现60FPS以上
硬件利用率提升:多核CPU并行处理效率提升300%+(测试数据:i7-12700K处理20,000实体)

通常被称为DOTS的三个支柱,可作为单独的Unity软件包使用。它们共同构成了交付面向数据的高性能解决方案的基础。
在这里插入图片描述

ECS(实体组件系统)

ECS 从面向对象的方法转变为面向数据的方法使得重用代码变得更加容易,也使得其他人更容易理解和使用它。它是一个与 GameObjects 兼容的面向数据的框架,凭借前所未有的控制和确定性水平,使经验丰富的 Unity 创作者能够实现更多。

实体创建流程:

// 传统MonoBehaviour转换示例
public class UnitMoverAuthoring : MonoBehaviour
{
    public float moveSpeed = 2;
    public float rotationSpeed = 2;
    
    //Baker 类负责将 GameObject 的数据和组件转化为可以在 DOTS 中操作的 ECS 实体。
    private class Baker : Baker<UnitMoverAuthoring>
    {
        public override void Bake(UnitMoverAuthoring authoring)
        {
            Entity entity = GetEntity(TransformUsageFlags.Dynamic);
            AddComponent(entity, new UnitMover
            {
                moveSpeed = authoring.moveSpeed,
                rotationSpeed = authoring.rotationSpeed,
                targetPosition = float3.zero,
            });
        }
    }
}

//ComponnetData 数据类
public struct UnitMover : IComponentData
{
    public float moveSpeed;
    public float rotationSpeed;
    public float3 targetPosition;
}

// System 系统逻辑
public partial struct MoveSystem : ISystem {
    public void OnUpdate(ref SystemState state) {
        foreach (var (transform, speed) in 
                SystemAPI.Query<RefRW<LocalTransform>, RefRO<MoveSpeed>>()) {
            transform.ValueRW.Position.y += speed.ValueRO.Value * SystemAPI.Time.DeltaTime;
        }
    }
}

Job System作业系统

C# 作业系统
该系统使 Unity 开发人员能够利用多核计算平台,并行化代码可以安全、高速地运行。C# 作业系统暴露了 Unity 内部的 C++ 作业系统,使 Unity 创作者能够在 Unity 内部处理的同时运行他们的脚本。

//我们定义一个组件,表示实体的速度。
[GenerateAuthoringComponent]
public struct MoveSpeed : IComponentData
{
    public float Value;
}

//创建 JobEntity
public struct MoveJob : IJobEntity
{
    public float DeltaTime; // 用于控制移动的增量

    // Execute 方法会对每个具有 MoveSpeed 组件的实体调用
    public void Execute(ref MoveSpeed moveSpeed, ref Translation translation)
    {
        translation.Value += moveSpeed.Value * DeltaTime; // 移动逻辑
    }
}

//在系统中使用 JobEntity
public class MoveSystem : SystemBase
{
    protected override void OnUpdate()
    {
        // 获取每帧的时间增量
        float deltaTime = Time.DeltaTime;

        // 创建一个 MoveJob 实例
        var moveJob = new MoveJob 
        {
            DeltaTime = deltaTime // 设置时间增量
        };

        // 调度 Job,处理所有包含 MoveSpeed 和 Translation 组件的实体
        this.Dependency = moveJob.ScheduleParallel(this.Dependency);
    }
}

Burst编译器

Burst是一种编译器,可将IL/.NET字节码转换为高度优化的本地代码。它使用业界公认的 LLVM 编译器基础架构,为游戏创作者提供 C# 原生代码的性能。Burst 还暴露了 CPU 的内在特性,从而可以对性能关键代码进行微调。

最后

Unity 面向数据的技术栈Dots
Unity 技术/EntityComponentSystemSamples

相关文章:

  • Python使用alembic实现数据库管理
  • docker 常用命令教程
  • LeetCode --- 439周赛
  • 【.NET】WinForms 和 WPF 在性能方面的对比
  • 5、STL中priority_queue的使用方法
  • Unity UGUI下实现精确点击的一种方式
  • 【GIT】non-fast-forward错误
  • python面试常见题目
  • 【RAG】基于向量检索的 RAG (BGE示例)
  • Leetcode 刷题记录 05 —— 普通数组
  • 硬件学习笔记--48 磁保持继电器相关基础知识介绍
  • 【每日学点HarmonyOS Next知识】 状态变量、公共Page、可见区域变化回调、接收参数、拖拽排序控件
  • 前端数据模拟 Mock.js 学习笔记(附带详细)
  • 中小学信息学特长生试卷(C++)
  • 6.聊天室环境安装 - Ubuntu22.04 - elasticsearch(es)的安装和使用
  • clickhouse执行进度
  • How to install nacos 2.5 with podman
  • 汇编的伪指令
  • Vue3 模板引用:打破数据驱动的次元壁(附高阶玩法)
  • openwrt路由系统------lua、uci的关系
  • 人民日报评外卖平台被约谈:合法规范经营,公平有序竞争
  • 来伊份发布关于消费者反映蜜枣粽问题处理的情况说明:与消费者达成和解
  • 王毅人民日报撰文:共商发展振兴,共建中拉命运共同体
  • 2025年上海科技节5月17日启动,56家重点实验室和大科学设施将向公众开放
  • 人民币对美元即期汇率盘中创半年新高,离岸市场升破7.2
  • “春申阡陌”漆画展:将传统漆艺融入现代创作