public void BuildObjects(GameObject springBoneRoot, GameObject colliderRoot, IEnumerable <string> requiredBones)
            {
                var managerProperties = PersistentSpringManagerProperties.Create(
                    springBoneRoot.GetComponentInChildren <SpringManager>());

                SpringBoneSetup.DestroySpringManagersAndBones(springBoneRoot);

                if (requiredBones != null)
                {
                    FilterBoneRecordsByRequiredBonesAndCreateUnrecordedBones(springBoneRoot, requiredBones);
                }

                var initialTransforms = GameObjectUtil.BuildNameToComponentMap <Transform>(springBoneRoot, true);

                foreach (var record in pivotRecords)
                {
                    BuildPivotFromSerializer(initialTransforms, record);
                }

                var setupMaps = SpringBoneSetupMaps.Build(springBoneRoot, colliderRoot);

                foreach (var record in springBoneRecords)
                {
                    BuildSpringBoneFromSerializer(setupMaps, record);
                }

                var springManager = springBoneRoot.AddComponent <SpringManager>();

                if (managerProperties != null)
                {
                    managerProperties.ApplyTo(springManager);
                }
                SpringBoneSetup.FindAndAssignSpringBones(springManager);
            }
            public static PersistentSpringManagerProperties Create(SpringManager sourceManager)
            {
                if (sourceManager == null)
                {
                    return(null);
                }

                var properties = new PersistentSpringManagerProperties
                {
                    simulationFrameRate = sourceManager.simulationFrameRate,
                    dynamicRatio        = sourceManager.dynamicRatio,
                    gravity             = sourceManager.gravity,
                    collideWithGround   = sourceManager.collideWithGround,
                    groundHeight        = sourceManager.groundHeight
                };

                return(properties);
            }
            public static PersistentSpringManagerProperties Create(SpringManager sourceManager)
            {
                if (sourceManager == null)
                {
                    return(null);
                }

                var properties = new PersistentSpringManagerProperties
                {
                    automaticUpdates    = sourceManager.automaticUpdates,
                    simulationFrameRate = sourceManager.simulationFrameRate,
                    dynamicRatio        = sourceManager.dynamicRatio,
                    dynamicAdditiveMode = sourceManager.dynamicAdditiveMode,
                    gravity             = sourceManager.gravity,
                    collideWithGround   = sourceManager.collideWithGround,
                    groundHeight        = sourceManager.groundHeight,
                    bounce   = sourceManager.bounce,
                    friction = sourceManager.friction
                };

                return(properties);
            }