/// <inheritdoc />
        public override MultiReferentialInverseConstraintJob Create(Animator animator, ref T data, Component component)
        {
            var job = new MultiReferentialInverseConstraintJob();

            var sources = data.sourceObjects;
            job.sources = new NativeArray<ReadWriteTransformHandle>(sources.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory);
            job.offsetTx = new NativeArray<AffineTransform>(sources.Length - 1, Allocator.Persistent, NativeArrayOptions.UninitializedMemory);

            var sourceBindTx = new AffineTransform[sources.Length];

            for (int i = 0; i < sources.Length; ++i)
            {
                job.sources[i] = ReadWriteTransformHandle.Bind(animator, sources[i].transform);
                sourceBindTx[i] = new AffineTransform(sources[i].position, sources[i].rotation);
            }

            int offset = 0;
            var invDriverTx = sourceBindTx[0].Inverse();
            for (int i = 1; i < sourceBindTx.Length; ++i)
            {
                job.offsetTx[offset] = invDriverTx * sourceBindTx[i];
                offset++;
            }

            return job;
        }
 /// <inheritdoc />
 public override void Destroy(MultiReferentialInverseConstraintJob job)
 {
     job.sources.Dispose();
     job.offsetTx.Dispose();
 }