Joints for 3D people???

Hello,
How are you? I was wondering what is the best tool to use if I want to have a 3D character that has an arm and a hand, and I want that character to grab the wrist of another character that has an arm and a hand, and I want to use a character controller on one of the characters so that IF another character has grabbed onto its wrist, the character is limited to walking within the circumference of the total length of both arms. Can that tool also be used to bend the elbows accordingly as well?

Thank you,
Michael S. Lowe

I actually wrote a script that does exactly what I want it to do. Here it is…

#pragma strict

var pGrabLimb : GameObject;
var pGrabObj : GameObject;

var pOrigLimbPos : Vector3;
var pOrigObjPos : Vector3;

function Start () {
  pOrigLimbPos = pGrabLimb.transform.localPosition;
  pOrigObjPos = pGrabObj.transform.localPosition;
}

function Update () {
  if (!pGrabObj.rigidbody) {
    pGrabObj.AddComponent.<Rigidbody>();
    pGrabObj.rigidbody.useGravity = false;
  }
  
  var diff : Vector3;
  
  diff = pGrabLimb.transform.position - pGrabObj.transform.position;
  
  pGrabObj.transform.root.transform.position += diff;
  
  if (!pGrabLimb.GetComponent.<CharacterJoint>()) {
    pGrabLimb.AddComponent("CharacterJoint");
    pGrabLimb.GetComponent.<CharacterJoint>().connectedBody = pGrabObj.rigidbody;
    pGrabLimb.rigidbody.useGravity = false;
  }

  diff = pOrigLimbPos - pGrabLimb.transform.localPosition;
  pGrabLimb.transform.localPosition = pOrigLimbPos;
  pGrabLimb.transform.root.transform.position += diff/2;
  diff = pOrigObjPos - pGrabObj.transform.localPosition;
  pGrabObj.transform.localPosition = pOrigObjPos;
  pGrabObj.transform.root.transform.position += diff/2;
      
}

I actually wrote a script that does exactly what I want it to do. Here it is…

#pragma strict

var pGrabLimb : GameObject;
var pGrabObj : GameObject;

var pOrigLimbPos : Vector3;
var pOrigObjPos : Vector3;

function Start () {
  pOrigLimbPos = pGrabLimb.transform.localPosition;
  pOrigObjPos = pGrabObj.transform.localPosition;
}

function Update () {
  if (!pGrabObj.rigidbody) {
    pGrabObj.AddComponent.<Rigidbody>();
    pGrabObj.rigidbody.useGravity = false;
  }
  
  var diff : Vector3;
  
  diff = pGrabLimb.transform.position - pGrabObj.transform.position;
  
  pGrabObj.transform.root.transform.position += diff;
  
  if (!pGrabLimb.GetComponent.<CharacterJoint>()) {
    pGrabLimb.AddComponent("CharacterJoint");
    pGrabLimb.GetComponent.<CharacterJoint>().connectedBody = pGrabObj.rigidbody;
    pGrabLimb.rigidbody.useGravity = false;
  }

  diff = pOrigLimbPos - pGrabLimb.transform.localPosition;
  pGrabLimb.transform.localPosition = pOrigLimbPos;
  pGrabLimb.transform.root.transform.position += diff/2;
  diff = pOrigObjPos - pGrabObj.transform.localPosition;
  pGrabObj.transform.localPosition = pOrigObjPos;
  pGrabObj.transform.root.transform.position += diff/2;
      
}