public IKBone(Transform transform, Transform sibling, float weight) { Transform = transform; Sibling = sibling; Weight = weight; Link = null; }
/// <summary> /// Prepare the transform for manipulation. /// </summary> public void Reset(Transform link) { Change = Quaternion.identity; Link = link; Parent = null; Child = null; }
public IK() { for (int i = 0; i < _transforms.Length; i++) { _transforms[i] = new IKTransform(); } }
public IKBone(Transform transform, float weight) { Weight = weight; Link = null; Transform = transform; Sibling = null; }
private void findBone(IKTransform transform, ref int last) { for (int i = last - 1; i >= 0; i--) { if (transform.Link == Bones[i].Transform) { Bones[i].Link = transform; last = i; break; } } }
/// <summary> /// Prepare the transform for manipulation. /// </summary> public void Reset(Transform link) { Change = Quaternion.identity; Link = link; SavedPosition = Link.position; SavedRotation = Link.rotation; SavedForward = Link.forward; if (link.parent != null) { SavedLocalPosition = Quaternion.Inverse(link.parent.rotation) * (link.parent.TransformPoint(link.localPosition) - link.parent.position); } Parent = null; Child = null; }
/// <summary> /// Remember original transformations of all bones. /// </summary> private bool prepareTransforms() { if (Bones.Length == 0 || TargetParentBone == null) { return(false); } for (int i = 0; i < Bones.Length; i++) { Bones[i].Link = null; } var transformIndex = 0; _target = _transforms[transformIndex++]; _target.Reset(TargetParentBone, TargetParentBone.parent, Offset, OffsetOrientation); int lastBone = Bones.Length; findBone(_target, ref lastBone); var transform = TargetParentBone.parent; var current = _target; while (transform != null && lastBone > 0) { var parentNode = _transforms[transformIndex++]; var parent = transform.parent; parentNode.Reset(transform, parent); findBone(parentNode, ref lastBone); current.Parent = parentNode; parentNode.Child = current; transform = parent; current = parentNode; } current.Calc(); return(true); }
/// <summary> /// Prepare the transform for manipulation. /// </summary> public void Reset(Transform link, Transform parent) { _storedTotalChange = Quaternion.identity; Change = Quaternion.identity; Link = link; SavedPosition = Link.position; SavedRotation = Link.rotation; SavedOffsetedForward = Link.forward; HasOffset = false; if (parent != null) { SavedLocalPosition = Quaternion.Inverse(parent.rotation) * (parent.TransformPoint(link.localPosition) - parent.position); } Parent = null; Child = null; }
/// <summary> /// Prepare the transform for manipulation. /// </summary> public void Reset(Transform link, Transform parent, Vector3 offsetPosition, Quaternion offsetOrientation) { _storedTotalChange = Quaternion.identity; Change = Quaternion.identity; Link = link; SavedPosition = Link.position; SavedRotation = Link.rotation; HasOffset = true; OffsetPosition = offsetPosition; OffsetOrientation = offsetOrientation; SavedOffsetedForward = OffsetOrientation * Link.forward; if (parent != null) { SavedLocalPosition = Quaternion.Inverse(parent.rotation) * (parent.TransformPoint(link.localPosition) - parent.position); } Parent = null; Child = null; }