public override TwoBoneIKConstraintJob Create(Animator animator, ref T data) { var job = new TwoBoneIKConstraintJob(); var cacheBuilder = new AnimationJobCacheBuilder(); job.root = TransformHandle.Bind(animator, data.root); job.mid = TransformHandle.Bind(animator, data.mid); job.tip = TransformHandle.Bind(animator, data.tip); job.target = TransformHandle.Bind(animator, data.target); if (data.hint != null) { job.hint = TransformHandle.Bind(animator, data.hint); } job.targetOffset = AffineTransform.identity; if (data.maintainTargetPositionOffset) { job.targetOffset.translation = data.tip.position - data.target.position; } if (data.maintainTargetRotationOffset) { job.targetOffset.rotation = Quaternion.Inverse(data.target.rotation) * data.tip.rotation; } job.linkLengths[0] = Vector3.Distance(data.root.position, data.mid.position); job.linkLengths[1] = Vector3.Distance(data.mid.position, data.tip.position); job.targetPositionWeightIdx = cacheBuilder.Add(data.targetPositionWeight); job.targetRotationWeightIdx = cacheBuilder.Add(data.targetRotationWeight); job.hintWeightIdx = cacheBuilder.Add(data.hintWeight); job.cache = cacheBuilder.Build(); return(job); }
public override TwoBoneIKConstraintJob Create(Animator animator, ref T data, Component component) { var job = new TwoBoneIKConstraintJob(); job.root = ReadWriteTransformHandle.Bind(animator, data.root); job.mid = ReadWriteTransformHandle.Bind(animator, data.mid); job.tip = ReadWriteTransformHandle.Bind(animator, data.tip); job.target = ReadOnlyTransformHandle.Bind(animator, data.target); if (data.hint != null) { job.hint = ReadOnlyTransformHandle.Bind(animator, data.hint); } job.targetOffset = AffineTransform.identity; if (data.maintainTargetPositionOffset) { job.targetOffset.translation = data.tip.position - data.target.position; } if (data.maintainTargetRotationOffset) { job.targetOffset.rotation = Quaternion.Inverse(data.target.rotation) * data.tip.rotation; } job.linkLengths[0] = Vector3.Distance(data.root.position, data.mid.position); job.linkLengths[1] = Vector3.Distance(data.mid.position, data.tip.position); job.targetPositionWeight = FloatProperty.Bind(animator, component, data.targetPositionWeightFloatProperty); job.targetRotationWeight = FloatProperty.Bind(animator, component, data.targetRotationWeightFloatProperty); job.hintWeight = FloatProperty.Bind(animator, component, data.hintWeightFloatProperty); return(job); }
public override void Update(TwoBoneIKConstraintJob job, ref T data) { job.cache.SetRaw(data.targetPositionWeight, job.targetPositionWeightIdx); job.cache.SetRaw(data.targetRotationWeight, job.targetRotationWeightIdx); job.cache.SetRaw(data.hintWeight, job.hintWeightIdx); }
public override void Destroy(TwoBoneIKConstraintJob job) { job.cache.Dispose(); }
public override void Destroy(TwoBoneIKConstraintJob job) { }