暫無描述
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.4KB

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