Esempio n. 1
0
 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();
     }
 }
Esempio n. 4
0
 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;
         }
     }
 }
Esempio n. 6
0
        /// <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;
        }
Esempio n. 7
0
        /// <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);
        }
Esempio n. 8
0
        /// <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;
        }
Esempio n. 9
0
        /// <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;
        }