How do I disable / enable a character joint?

I am trying to go from animation, to ragdoll, then back to animation. I can do this if I can enable / disable character joints. How can I accomplish this? I don’t see a little check box.

From what I’ve found the joint still applies its constraint even if rigidbody.isKinematic is set to true.

I solved it by destroying the joints on startup, then recreating them to enable the ragdoll.
Not very elegant, but it seems to work ok.

public class RagdollEnabler : MonoBehaviour {

	private List<CharacterJointDisabler> _jointDisablers;
	
	private void Awake () 
	{
		CharacterJoint[] characterJoints = transform.GetComponentsInChildren<CharacterJoint>();

		_jointDisablers = new List<CharacterJointDisabler>();
		for(int i=0; i<characterJoints.Length; ++i)
		{
			characterJoints*.collider.enabled = false;*

_ characterJoints*.rigidbody.isKinematic = true;*_

_ CharacterJointDisabler disabler = characterJoints*.gameObject.AddComponent();
disabler.CopyValuesAndDestroyJoint(characterJoints);_

jointDisablers.Add(disabler);*
* }
}*_

* public void ActivateRagdoll ()*
* {*
* rigidbody.constraints = RigidbodyConstraints.None;*

* for(int i=0; i<jointDisablers.Count; ++i)*
* {_
_jointDisablers.collider.enabled = true;
_jointDisablers.rigidbody.isKinematic = false;*

jointDisablers*.CreateJointAndDestoryThis();*
* }
}
}*_

public class CharacterJointDisabler : MonoBehaviour
{
* private Rigidbody ConnectedBody;*
* private Vector3 Anchor;*
* private Vector3 Axis;*
* private bool AutoConfigureConnectedAnchor;*
* private Vector3 ConnectedAnchor;*
* private Vector3 SwingAxis;*
* private SoftJointLimit LowTwistLimit;*
* private SoftJointLimit HighTwistLimit;*
* private SoftJointLimit Swing1Limit;*
* private SoftJointLimit Swing2Limit;*
* private float BreakForce;*
* private float BreakTorque;*
* private bool EnableCollision;*

* public void CopyValuesAndDestroyJoint(CharacterJoint characterJoint)*
* {*
* ConnectedBody = characterJoint.connectedBody;*
* Anchor = characterJoint.anchor;*
* Axis = characterJoint.axis;*
* AutoConfigureConnectedAnchor = characterJoint.autoConfigureConnectedAnchor;*
* ConnectedAnchor = characterJoint.connectedAnchor;*
* SwingAxis = characterJoint.swingAxis;*
* LowTwistLimit = characterJoint.lowTwistLimit;*
* HighTwistLimit = characterJoint.highTwistLimit;*
* Swing1Limit = characterJoint.swing1Limit;*
* Swing2Limit = characterJoint.swing2Limit;*
* BreakForce = characterJoint.breakForce;*
* BreakTorque = characterJoint.breakTorque;*
* EnableCollision = characterJoint.enableCollision;*

* Destroy (characterJoint);*
* }*

* public void CreateJointAndDestoryThis()*
* {*
* CharacterJoint characterJoint = gameObject.AddComponent();*

* characterJoint.connectedBody = ConnectedBody;*
* characterJoint.anchor = Anchor;*
* characterJoint.axis = Axis;*
* characterJoint.autoConfigureConnectedAnchor = AutoConfigureConnectedAnchor;*
* characterJoint.connectedAnchor = ConnectedAnchor;*
* characterJoint.swingAxis = SwingAxis;*
* characterJoint.lowTwistLimit = LowTwistLimit;*
* characterJoint.highTwistLimit = HighTwistLimit;*
* characterJoint.swing1Limit = Swing1Limit;*
* characterJoint.swing2Limit = Swing2Limit;*
* characterJoint.breakForce = BreakForce;*
* characterJoint.breakTorque = BreakTorque;*
* characterJoint.enableCollision = EnableCollision;*

* Destroy(this);*
* }*

}

You can use a simple function to enable/disable the rigidbodies:


var rigids: Rigidbody[];

function Start(){
  rigids = GetComponentsInChildren.< Rigidbody>();
}

// make all rigidbodies kinematic (true) or not (false):

function MakeKinematic(onOff: boolean){
  for (var rb: Rigidbody in rigids){
    rb.isKinematic = onOff;
  }
}

Use MakeKinematic(false) to enable the ragdoll, and MakeKinematic(true) to disable it.

Plz check Rigidbody iskinematic property and save urself lot of trouble