EntitiesSample_9. CrossQuery

打印 上一主题 下一主题

主题 562|帖子 562|积分 1686

该示例重要的内容:
1.URPMaterialPropertyBaseColor:Unity.Rendering空间下的材质组件,该结构体拥有一个float4颜色的变量,赋值和其他的组件一样
2.EntityQuery转数组
boxQuery.ToComponentDataArray<LocalTransform>(Allocator.Temp);
3.IJobChunk的利用
  1.   new CollisionJob
  2.             {
  3.                 //获取LocalTransform组件的句柄
  4.                 LocalTransformTypeHandle = SystemAPI.GetComponentTypeHandle<LocalTransform>(true),
  5.                 //获取DefaultColor组件的句柄
  6.                 DefaultColorTypeHandle = SystemAPI.GetComponentTypeHandle<DefaultColor>(true),
  7.                 //获取URPMaterialPropertyBaseColor组件的句柄
  8.                 BaseColorTypeHandle = SystemAPI.GetComponentTypeHandle<URPMaterialPropertyBaseColor>(),
  9.                 //获取实体类型的句柄
  10.                 EntityTypeHandle = SystemAPI.GetEntityTypeHandle(),
  11.                 //实体查询对象转化为数组句柄
  12.                 OtherChunks = boxQuery.ToArchetypeChunkArray(state.WorldUpdateAllocator)
  13.                 //作业调度,   Complete():需要全部完成,然后执行下一次
  14.             }.ScheduleParallel(boxQuery, state.Dependency).Complete();
复制代码
特别注意的是IJobChunk接口中的句柄变量,都需要 [ReadOnly]标签修饰,例如:
 [ReadOnly] public ComponentTypeHandle<LocalTransform> LocalTransformTypeHandle;
在Chunk作业中,需要利用ArchetypeChunk chunk获取当前要利用的变量值,示例代码是这样的没什么好解释的,就是双循环判定距离
  1. [BurstCompile]
  2.     public struct CollisionJob : IJobChunk
  3.     {
  4.         [ReadOnly] public ComponentTypeHandle<LocalTransform> LocalTransformTypeHandle;
  5.         [ReadOnly] public ComponentTypeHandle<DefaultColor> DefaultColorTypeHandle;
  6.         public ComponentTypeHandle<URPMaterialPropertyBaseColor> BaseColorTypeHandle;
  7.         [ReadOnly] public EntityTypeHandle EntityTypeHandle;
  8.         [ReadOnly] public NativeArray<ArchetypeChunk> OtherChunks;
  9.         public void Execute(in ArchetypeChunk chunk, int unfilteredChunkIndex, bool useEnabledMask,
  10.             in v128 chunkEnabledMask)
  11.         {
  12.             var transforms = chunk.GetNativeArray(ref LocalTransformTypeHandle);
  13.             var defaultColors = chunk.GetNativeArray(ref DefaultColorTypeHandle);
  14.             var baseColors = chunk.GetNativeArray(ref BaseColorTypeHandle);
  15.             var entities = chunk.GetNativeArray(EntityTypeHandle);
  16.             for (int i = 0; i < transforms.Length; i++)
  17.             {
  18.                 var transform = transforms[i];
  19.                 var baseColor = baseColors[i];
  20.                 var entity = entities[i];
  21.                 // reset to default color
  22.                 baseColor.Value = defaultColors[i].Value;
  23.                 for (int j = 0; j < OtherChunks.Length; j++)
  24.                 {
  25.                     var otherChunk = OtherChunks[j];
  26.                     var otherTranslations = otherChunk.GetNativeArray(ref LocalTransformTypeHandle);
  27.                     var otherEntities = otherChunk.GetNativeArray(EntityTypeHandle);
  28.                     for (int k = 0; k < otherChunk.Count; k++)
  29.                     {
  30.                         var otherTranslation = otherTranslations[k];
  31.                         var otherEntity = otherEntities[k];
  32.                         if (entity != otherEntity && math.distancesq(transform.Position, otherTranslation.Position) < 1)
  33.                         {
  34.                             baseColor.Value.y = 0.5f; // set green channel
  35.                             break;
  36.                         }
  37.                     }
  38.                 }
  39.                 baseColors[i] = baseColor;
  40.             }
  41.         }
  42.     }
复制代码




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

吴旭华

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表