Nessuna descrizione
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

UpdateBoundsJob.cs 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #if ENABLE_ANIMATION_COLLECTION
  2. using Unity.Collections;
  3. using Unity.Jobs;
  4. using Unity.Mathematics;
  5. #if ENABLE_ANIMATION_BURST
  6. using Unity.Burst;
  7. #endif
  8. namespace UnityEngine.U2D.Animation
  9. {
  10. #if ENABLE_ANIMATION_BURST
  11. [BurstCompile]
  12. #endif
  13. internal struct UpdateBoundJob : IJobParallelFor
  14. {
  15. [ReadOnly]
  16. public NativeArray<int> rootTransformId;
  17. [ReadOnly]
  18. public NativeArray<int> rootBoneTransformId;
  19. [ReadOnly]
  20. public NativeArray<float4x4> rootTransform;
  21. [ReadOnly]
  22. public NativeArray<float4x4> boneTransform;
  23. [ReadOnly]
  24. public NativeHashMap<int, TransformAccessJob.TransformData> rootTransformIndex;
  25. [ReadOnly]
  26. public NativeHashMap<int, TransformAccessJob.TransformData> boneTransformIndex;
  27. [ReadOnly]
  28. public NativeArray<Bounds> spriteSkinBound;
  29. public NativeArray<Bounds> bounds;
  30. public void Execute(int i)
  31. {
  32. //for (int i = 0; i < rootTransformId.Length; ++i)
  33. {
  34. var unityBounds = spriteSkinBound[i];
  35. var rootIndex = rootTransformIndex[rootTransformId[i]].transformIndex;
  36. var rootBoneIndex = boneTransformIndex[rootBoneTransformId[i]].transformIndex;
  37. if (rootIndex < 0 || rootBoneIndex < 0)
  38. return;
  39. var rootTransformMatrix = rootTransform[rootIndex];
  40. var rootBoneTransformMatrix = boneTransform[rootBoneIndex];
  41. var matrix = math.mul(rootTransformMatrix, rootBoneTransformMatrix);
  42. var center = new float4(unityBounds.center, 1);
  43. var extents = new float4(unityBounds.extents, 0);
  44. var p0 = math.mul(matrix, center + new float4(-extents.x, -extents.y, extents.z, extents.w));
  45. var p1 = math.mul(matrix, center + new float4(-extents.x, extents.y, extents.z, extents.w));
  46. var p2 = math.mul(matrix, center + extents);
  47. var p3 = math.mul(matrix, center + new float4(extents.x, -extents.y, extents.z, extents.w));
  48. var min = math.min(p0, math.min(p1, math.min(p2, p3)));
  49. var max = math.max(p0, math.max(p1, math.max(p2, p3)));
  50. extents = (max - min) * 0.5f;
  51. center = min + extents;
  52. bounds[i] = new Bounds()
  53. {
  54. center = new Vector3(center.x, center.y, center.z),
  55. extents = new Vector3(extents.x, extents.y, extents.z)
  56. };
  57. }
  58. }
  59. }
  60. }
  61. #endif