ECS:WriteGroup

Posted 技术就像一条河流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ECS:WriteGroup相关的知识,希望对你有一定的参考价值。

定义:
使用WriteGroup标记了同一个component的components就属于一个WriteGroup:
    public struct W : IComponentData
    {
       public int Value;
    }
    [WriteGroup(typeof(W))]
    public struct A : IComponentData
    {
       public int Value;
    }
    [WriteGroup(typeof(W))]
    public struct B : IComponentData
    {
       public int Value;
    }
    上面的代码中,W A B就属于同一个W Group。
 
使用:
让WriteGroup生效的方法:在Query中开启WriteGroup选项:
public class AddingSystem : JobComponentSystem
{
   protected override JobHandle OnUpdate(JobHandle inputDeps) {
      return Entities
         .WithEntityQueryOptions(EntityQueryOptions.FilterWriteGroup)
         .ForEach((ref W w, in B b) => { }).Schedule(inputDeps);}
}
使用EntityQueryDesc: 
public class AddingSystem : JobComponentSystem
{
   private EntityQuery m_Query;
   protected override void OnCreate()
   {
       var queryDescription = new EntityQueryDesc
       {
           All = new ComponentType[] {
              ComponentType.ReadWrite<W>(),
              ComponentType.ReadOnly<B>()
           },
           Options = EntityQueryOptions.FilterWriteGroup
       };
       m_Query = GetEntityQuery(queryDescription);
   }
   // Define Job and schedule...
}
这样,在Query的时候,WriteGroup就会影响查询的结果了。
 
规则:
(1)同一个Group的components,查询时只会包含一个,同组的component相互是互斥的,比如上面的W A B,查询结果只会返回包含W A B任意一个的entity;
(2)可以显示的要求包含同组的其他component。
以此规则计算,上面的例子中,query结果是包含W和B的,包含A的会被排除。
 
应用:
(1)扩展或覆盖原有system功能的写入目标,可以保证原来的system正常工作,但是包含了自己的特殊component的entity按照覆盖的方式工作。
    Unity.Transforms里面的没一个component都是用了write group的特性。
(2)提供system的可扩展性。
 
 

以上是关于ECS:WriteGroup的主要内容,如果未能解决你的问题,请参考以下文章

优雅地停止 ecs 容器

将 IAM 角色应用于 ECS 实例

Java应用构建并部署ECS

将 aws 资源限制为特定的 ecs 集群

Yii 2 —— Model表前缀

阿里云ECS用Xshell安装wdcp教程