游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2112|回复: 0

??DOTS??????????????

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2019-12-5 11:05:28 | 显示全部楼层 |阅读模式
?????????????DOTS??Unity????????????????C# Job System???????ECS?Burst Compiler????????????????????????????????Far North Entertainment?

?Unite Copenhagen???????Far North Entertainment???????????????????????Unity?????DOTS???

1.jpg

Far North Entertainment

????????Far North Entertainment??5??????????????????2018???Gear VR?????Down to Dungeon??????????????????????????

?????????????????????????????????????????????????????????????????????????

???????????????????????????????????????????????????????????????????????Anders Eriksson?????DOTS???????Object-oriented??????????Data-oriented????

Anders Eriksson??????????????????????????????????????????????????????????????????????????????

??????????????????Anders Eriksson?????????????????????????????????????????????????????????CPU????????????????????????????????????????????????????????SIMD???

???????????????Unity????????????????ID??????????????????????????Archetypes?????????????????

Anders Eriksson??????ECS??SQL??????????????????Archetype?????????????????????????????????????????Archetype?????????????

????DOTS

????????Anders Eriksson?????????????ECS???????Unity?Nordeus??????????

???????????????????????????CppCon 2014???Mike Acton???????????????????????????????????


Far North Entertainment?????????????????????9?????Unite Copenhagen????????????????????????

????????????????????????????ECS?C# Job System?Burst Compiler??????

??????

Anders Eriksson??????????????????????????????????????

???????????????????ZombieView???????????????EntityView???EntityView?????????MonoBehaviour??????????????????ZombieView????Update????????????????????

??????????????????????????????????????????????CPU????????????????????????

?????????????????CPU???????????????????CPU???????????????128???256???????

????????DOTS????????????????????????????????ZombieView????Update??????????????????????????????????

???????2D?????????????????????????????????????????????????????????????????

  1. [Serializable]
  2. public   struct PositionData2D : IComponentData
  3. {
  4.     public float2 Position;
  5. }

  6. [Serializable]
  7. public struct HeadingData2D   : IComponentData
  8. {
  9.     public float2 Heading;
  10. }

  11. [Serializable]
  12. public struct TargetPositionData   : IComponentData
  13. {
  14.     public float2 TargetPosition;
  15. }
复制代码

????????Archetype???Archetype??????????????????????????????????????????????????????????????????????????????Archetype???

????????ComponentDataProxy????????ComponentDataProxy???????????????MonoBehaviour????EntityManager?????????????????????????????????????????????????ArchetypeChunks????????16kb????????

???????????????????????

2.png

Anders Eriksson???????????????????????????????????????????????????????????????????????????????

?????????????????????????????????????????????????16kb?????????????????????????????????????????????????????????????

??????????

???????????????????????????????????????C# Job System???CPU??????????

?????????????PositionData2D?HeadingData2D?TargetPositonData????????????????????

???Anders Eriksson???????JobComponentSystem????OnCreate??????????

???????

  1. private EntityQuery m_Group;

  2. protected override void   OnCreate()
  3. {
  4.        base.OnCreate();

  5.        var query = new EntityQueryDesc
  6.        {
  7.               All = new []
  8.               {
  9.                      ComponentType.ReadWrite<PositionData2D>(),
  10.                      ComponentType.ReadWrite<HeadingData2D>(),
  11.                      ComponentType.ReadOnly<TargetPositionData>()
  12.               },
  13.        };

  14.        m_Group = GetEntityQuery(query);
  15. }
复制代码

????????????????????????????????????????C# Job System?????????????????????????

Andres Eriksson???C# Job System??????C# Job System??Unity?????????????????????????????????CPU???????????????????

????????????????????????????????????????????IJobChunk????????????????????????

????????UpdatePositionAndHeadingJob?????????????????????

????????????

  1. protected override JobHandle OnUpdate(JobHandle inputDeps)
  2. {
  3.         var positionDataType       = GetArchetypeChunkComponentType<PositionData2D>();
  4.         var headingDataType        = GetArchetypeChunkComponentType<HeadingData2D>();
  5.         var targetPositionDataType = GetArchetypeChunkComponentType<TargetPositionData>(true);

  6.         var updatePosAndHeadingJob = new UpdatePositionAndHeadingJob
  7.         {
  8.                 PositionDataType = positionDataType,
  9.                 HeadingDataType = headingDataType,
  10.                 TargetPositionDataType = targetPositionDataType,
  11.                 DeltaTime = Time.deltaTime,
  12.                 RotationLerpSpeed = 2.0f,
  13.                 MovementLerpSpeed = 4.0f,
  14.         };

  15.         return updatePosAndHeadingJob.Schedule(m_Group, inputDeps);
复制代码

????????

  1. public struct UpdatePositionAndHeadingJob : IJobChunk
  2. {
  3.     public ArchetypeChunkComponentType<PositionData2D> PositionDataType;
  4.     public ArchetypeChunkComponentType<HeadingData2D> HeadingDataType;

  5.     [ReadOnly]
  6.     public ArchetypeChunkComponentType<TargetPositionData> TargetPositionDataType;

  7.     [ReadOnly] public float DeltaTime;
  8.     [ReadOnly] public float RotationLerpSpeed;
  9.     [ReadOnly] public float MovementLerpSpeed;
复制代码

????????????????????????????????

???????????

  1. public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex)
  2. {
  3. var chunkPositionData       = chunk.GetNativeArray(PositionDataType);
  4. var chunkHeadingData        = chunk.GetNativeArray(HeadingDataType);
  5. var chunkTargetPositionData = chunk.GetNativeArray(TargetPositionDataType);

  6. for (int i = 0; i < chunk.Count; i++)
  7. {
  8. var target       = chunkTargetPositionData[i];
  9. var positionData = chunkPositionData[i];
  10. var headingData  = chunkHeadingData[i];

  11. float2 toTarget = target.TargetPosition - positionData.Position;
  12. float distance  = math.length(toTarget);

  13. headingData.Heading = math.select(
  14. headingData.Heading,
  15. math.lerp(headingData.Heading,
  16. math.normalize(toTarget),
  17. math.mul(DeltaTime, RotationLerpSpeed)),
  18. distance > 0.008
  19. );

  20. positionData.Position = math.select(
  21. target.TargetPosition,
  22. math.lerp(
  23. positionData.Position,
  24. target.TargetPosition,
  25. math.mul(DeltaTime, MovementLerpSpeed)),
  26. distance <= 1
  27. );

  28. chunkPositionData[i] = positionData;
  29. chunkHeadingData[i]  = headingData;
  30. }
  31. }
复制代码

Anders Eriksson??????????????Select?????Branch?????????????????????

Select???????????????????????????????????????????Select????????????CPU??????????????

??Burst Compiler????

???????????????DOTS??????????Burst Compiler?

????????????????????Unity???Mathematics????????????BurstCompile??????????

  1. [BurstCompile]
  2. public struct UpdatePositionAndHeadingJob : IJobChunk
  3. {
  4.     public ArchetypeChunkComponentType<PositionData2D> PositionDataType;
  5.     public ArchetypeChunkComponentType<HeadingData2D> HeadingDataType;

  6.     [ReadOnly]
  7.     public ArchetypeChunkComponentType<TargetPositionData> TargetPositionDataType;

  8.     [ReadOnly] public float DeltaTime;
  9.     [ReadOnly] public float RotationLerpSpeed;
  10.     [ReadOnly] public float MovementLerpSpeed;
复制代码

Burst Compiler????????????SIMD???????????????????????????????????????????128??????????????????

????Burst Compiler???????????C# Job System??????????????????

??????????????????????????

3.png

?????????????????????????????????????????????????????????????????????????CPU???????????Burst Compiler?????????SIMD????????????

DOTS????

????Far North Entertainment?????DOTS????????

????????????????ECS?????????????????????

?ECS?????????Archetype?????????????????????????

??????????????????CPU?????????

????????????????????????????????????????

??????????????????????????????????????Unity?Native???????????????????????

??????????????????????

????C# Job System???????CPU???

????????Burst Compiler?????SIMD????????Burst Inspector?????

???????????????UDP??????????????????????

?????????????Anders Eriksson?????????????????????????????????DOTS???????????????

??

Anders Eriksson????Unite??????DOTS?????Unity Physics?Live Link??????????????????????DOTS??????????????????ECS?????Unity??????????????????

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

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-17 20:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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