zoukankan      html  css  js  c++  java
  • Unity-ECS-实践

    Archetypes原型 (它的存在使得遍历组件的命中率非常高)

    • Archetype是一个容器,Unity规定每个ArcheType的大小16kb,不够就再开。始终保存内存的连续性

    World 世界

    • World包含EntityManager、ComponentSystems、Achetypes(原型)
    • ECS默认提供一个世界。
    • 世界之间不具备互通性。

    简单从MonoBehavior创建Entity

    // Create entity prefab from the gameobject hierarchy once
    var setting = GameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld, null);
    var prefabEntity = GameObjectConversionUtility.ConvertGameObjectHierarchy(prefab, setting);
    var entityManager = World.DefaultGameObjectInjectionWorld.EntityManager;
    
    // Efficiently instantiate a bunch of entities from the already converted entity prefab
    var instance = entityManager.Instantiate(prefabEntity);
    //SetComponentData
    entityManager.SetComponentData(instance,new Translation{Value =  Vector3.zero});
    

    数据存储相关

    Chunk的概念
    Chunk是Unity ECS中特有的一个数据结构,在ECS部分代码中有大量使用,通常是指用来存放Component信息的与ArchetypeChunk,此外还有更一般的Chunk通过ChunkAllocator进行开辟,可以存放ArcheType中的各类型信息,大小和存储结构都与ArchetypeChunk不同,此处的Chunk特指存放ArcheType中Component信息的ArchetypeChunk。Chunk有以下几个特点:

    EntityManager会将Component数据存放在固定的16kb大小的Chunk中(可以在Chunk定义中找到指定大小kChunkSize)
    每个Chunk结构包含了这个区块中内容的相关信息
    每个EntityArchetype都包括了一个Chunk的独特集合
    一个chunk只能存在于一个archetype中
    一个ArchetypeChunk结构是一个到具体Chunk的指针
    每一个Chunk中包含的内容有:

    一个指向其所归属的Archetype的指针
    一个可以容纳多少个该Archetype类型Component数据的容量(Capacity)以及当前存放个数(Count),容量由Chunk的总大小除以单个Archetype所有Component大小之和得到
    一个关于SharedComponentData值的索引(indices)数组,每个Chunk对于每种SharedComponentData类型只会存放一份具体值,所有在该Chunk上的Entity数据共享该值。
    一个ChangeVersion表明该Chunk上每一种Component上一次被修改的时机
    Entity中各ComponentData的具体数据,这边相同的类型的ComponentData会被放在一起,一种类型结束才是下一种
    Chunk中正式ComponentData数据内容从Buffer字段开始,ComponentData的具体存储排列如图

  • 相关阅读:
    SpringMvc的服务器端跳转和客户端跳转
    springMvc的一些简介 和基于xml的handlerMapping基本流程
    springMvc 的参数验证 BindingResult result 的使用
    SpringMVC 学习笔记(二) @RequestMapping、@PathVariable等注解
    springmvc处理ajax请求
    取maven copy部分
    maven scope含义的说明
    Maven依赖中的scope详解
    EasyMock 使用方法与原理剖析
    Maven:Generating Project in Batch mode 卡住问题
  • 原文地址:https://www.cnblogs.com/Jaysonhome/p/12890384.html
Copyright © 2011-2022 走看看