RagdollBoneTargetBonePair[] CreateBonePairs(RagdollDefinitionBindings bindings, Transform targetParent) { List <RagdollBoneTargetBonePair> pairs = new List <RagdollBoneTargetBonePair>(); CreateBonePairsRecursively(FindCorrespondingBone(bindings.Root.Transform, targetParent), pairs, bindings.transform); return(pairs.ToArray()); void CreateBonePairsRecursively(Transform targetBoneTransform, List <RagdollBoneTargetBonePair> ragdollPairs, Transform ragdollParentTransform) { Transform ragdollBoneTransform = FindCorrespondingBone(targetBoneTransform, ragdollParentTransform); RagdollBone ragdollBone = null; if (ragdollBoneTransform) { ragdollBone = GetRagdollBoneForRagdollBoneTransform(ragdollBoneTransform, bindings); } if (ragdollBone != null) { ragdollPairs.Add(new RagdollBoneTargetBonePair(ragdollBone, targetBoneTransform)); } //Recursively call all of its children for (int i = 0; i < targetBoneTransform.childCount; i++) { CreateBonePairsRecursively(targetBoneTransform.GetChild(i), ragdollPairs, ragdollParentTransform); } } }
public TargetToRagdollMapper(RagdollDefinitionBindings bindings, Transform targetParent) { if (!bindings) { throw new System.ArgumentNullException("Tried to create a TargetToRagdollMapper with a null RagdollDefinitionBindings."); } _bonePairs = CreateBonePairs(bindings, targetParent); }
void OnEnable() { settings = GetComponent <RagdollSettings>(); bindings = GetComponent <RagdollDefinitionBindings>(); bindings.UnsubscribeFromOnBonesCreated(GatherColliders); bindings.SubscribeToOnBonesCreated(GatherColliders); EnsureMaterials(); }
void DestroyIrrelevantObjects() { RagdollDefinitionBindings bindings = rootBone.GetComponentInParent <RagdollDefinitionBindings>(); Assert.IsNotNull(bindings); Transform transform = rootBone.transform; while (transform != bindings.transform) { DestroySiblings(transform); transform = transform.parent; } }
static RagdollBone GetRagdollBoneForRagdollBoneTransform(Transform ragdollBoneTransform, RagdollDefinitionBindings bindings) { ConfigurableJoint joint = ragdollBoneTransform.GetComponent <ConfigurableJoint>(); if (bindings.TryGetBoundBoneName(joint, out BoneName boneName)) { bindings.TryGetBone(boneName, out RagdollBone bone); return(bone); } else { return(null); } }