Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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;
                }
            }
Пример #5
0
        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);
            }
        }