public override MultiAimInverseConstraintJob Create(Animator animator, ref T data, Component component) { var job = new MultiAimInverseConstraintJob(); job.driven = ReadOnlyTransformHandle.Bind(animator, data.constrainedObject); job.drivenParent = ReadOnlyTransformHandle.Bind(animator, data.constrainedObject.parent); job.drivenOffset = Vector3Property.Bind(animator, component, data.offsetVector3Property); job.aimAxis = data.aimAxis; WeightedTransformArray sourceObjects = data.sourceObjects; WeightedTransformArrayBinder.BindReadWriteTransforms(animator, component, sourceObjects, out job.sourceTransforms); WeightedTransformArrayBinder.BindWeights(animator, component, sourceObjects, data.sourceObjectsProperty, out job.sourceWeights); job.sourceOffsets = new NativeArray <Quaternion>(sourceObjects.Count, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); for (int i = 0; i < sourceObjects.Count; ++i) { if (data.maintainOffset) { var aimDirection = data.constrainedObject.rotation * data.aimAxis; var dataToSource = sourceObjects[i].transform.position - data.constrainedObject.position; var rot = QuaternionExt.FromToRotation(dataToSource, aimDirection); job.sourceOffsets[i] = Quaternion.Inverse(rot); } else { job.sourceOffsets[i] = Quaternion.identity; } } job.weightBuffer = new NativeArray <float>(sourceObjects.Count, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); return(job); }
public override void Destroy(MultiAimInverseConstraintJob job) { job.sourceTransforms.Dispose(); job.sourceWeights.Dispose(); job.sourceOffsets.Dispose(); job.weightBuffer.Dispose(); }