zoukankan      html  css  js  c++  java
  • Unity下一轮最大的变革-Entity Component System & C# Jobs System

    ECS+jobs实现的酷炫效果

    新一代Entity Component System(ECS)将会彻底改变Unity的底层概念(GameObject-Component 系统)和现有工作方式。MonoBehavious、Update、GameObject....这些概念已经过时了!

    1. 什么是ECS?

    ECS,中文:实体-组件系统。并不是什么新鲜玩意,它是在游戏架构中广泛采用的一种架构。在游戏中,每个物体是一个Entity(实体),比如,敌人、子弹、车辆等。每个实体具有一个或多个组件,赋予这个实体不同的行为或功能。所以,一个实体的行为可以在游戏运行时通过加减组件进行改变。ECS经常和数据驱动模式一起使用。


    从上面介绍可以看到,Unity中的GameObject好像扮演着实体的角色,但,它不够纯粹!

    • 下一代ECS全新架构中,将不会再有GameObject的概念,取而代之的是真正的轻量化的Entity,一个Entity就只是Entity,可以把它看成超级轻量化的GameObject,实际上,一个Entity什么都做不了。它不存储任何数据,甚至连名字都没有!
    • 你可以给Entity增加或移去Component,但,旧的Component不复存在,其被重新定义为ComponentData,这是一个继承自IComponentData接口的,高效的结构体:

    struct MyComponent: IComponentData
    {} 
    

      

    2.为什么要引入 ECS

    传统的 GameObject/MonoBehaviour 系统七宗罪:(深有体会)

    • 面向对象的编程方式(曾经的圣典,已经跟不上时代,OOP最大的问题是数据和逻辑混在一起...现在我们要数据驱动模型)
    • Mono编译的未经优化的机器码
    • 糟糕的垃圾回收
    • 不能忍的单线程

    Entity-component-system的出现,就是解决这些问题:

    • 简单的思想:数据和逻辑构成你的游戏。
    • 有了ECS,就可以使用Unity(c#) Job System 和 Burst 编译器,充分发挥多核CPU的潜力

    3. 纯ECS解决方式:

    欢迎进入Unity的未来:ECS+IComponentData+c# jobs

    • 我们使用ECS的本意是为了提高执行效率(performance),为了获得这种高效率,你必须使用 SIMD 方式编写代码(custom data layouts for each loop)。
    • c# job system 只能够管理结构体和NativeContainers,因此,IComponentData是最好的解决方案。
    • EntityManager 保证了线性内存模型下的访问(linear memory layout:https://en.wikipedia.org/wiki/Flat_memory_model)。
      三者搭配使用,如虎添翼。

    说了半天,我到底怎么用ECS?

    请观看下面的视频

     

    扫码时备注或说明中留下邮箱 

    付款后如未回复请至https://shop135452397.taobao.com/ 

    联系店主

     
     
  • 相关阅读:
    对小课堂cpp的用户体验
    面试题 02.07. 链表相交 做题小结
    Leetcode 133. 克隆图 做题小结
    Leetcode 889. 根据前序和后序遍历构造二叉树-105. 从前序与中序遍历序列构造二叉树-106. 从中序与后序遍历序列构造二叉树
    图 的矩阵表示 和邻接表表示
    二叉树 常用函数 小结
    LeetCode 100. 相同的树 做题小结
    LeetCode 897. 递增顺序查找树 做题小结
    Leetcode 814. 二叉树剪枝 做题小结
    Leetcode l872. 叶子相似的树 做题小结
  • 原文地址:https://www.cnblogs.com/jiahuafu/p/10430771.html
Copyright © 2011-2022 走看看