public VRMSpringBone ToSpringBone(GameObject gameObject)
        {
            var targetObject = HierarchyPath.ToGameObject(AttachedTo, gameObject);
            var attachedBone = targetObject.AddComponent <VRMSpringBone>();

            // Copy values
            attachedBone.m_comment        = m_comment;
            attachedBone.m_stiffnessForce = m_stiffnessForce;
            attachedBone.m_gravityPower   = m_gravityPower;
            attachedBone.m_gravityDir     = m_gravityDir;
            attachedBone.m_dragForce      = m_dragForce;
            attachedBone.m_center         = HierarchyPath.ToTransform(m_center);
            attachedBone.RootBones        = HierarchyPath.ToTransforms(RootBones, gameObject);
            attachedBone.m_hitRadius      = m_hitRadius;
            attachedBone.ColliderGroups   = new VRMSpringBoneColliderGroup[ColliderGroups.Count];
            for (var i = 0; i < ColliderGroups.Count; i++)
            {
                var cgAttachedObject = HierarchyPath.ToGameObject(ColliderGroups[i], gameObject);
                if (cgAttachedObject != null)
                {
                    attachedBone.ColliderGroups[i] = cgAttachedObject.GetComponent <VRMSpringBoneColliderGroup>();
                }
            }
            return(attachedBone);
        }
Пример #2
0
        public static SerializableDynamicBoneCollider FromDynamicBoneCollider(DynamicBoneCollider collider)
        {
            Debug.Log($"Convert DynamicBoneCollider to serializable: {collider.name}");

            var serializableCollider = new SerializableDynamicBoneCollider();

            serializableCollider.TransformScale = collider.transform.lossyScale;
            serializableCollider.AttachedTo     = HierarchyPath.FromTransform(collider.transform);

            // Copy values
            serializableCollider.m_Direction = collider.m_Direction;
            serializableCollider.m_Center    = collider.m_Center;
            serializableCollider.m_Bound     = collider.m_Bound;
            serializableCollider.m_Radius    = collider.m_Radius;
            serializableCollider.m_Height    = collider.m_Height;

            return(serializableCollider);
        }
        // Convert to VRMSpringBoneCollider
        public VRMSpringBoneColliderGroup ToSpringBoneColliderGroup(GameObject gameObject)
        {
            var targetObject          = HierarchyPath.ToGameObject(AttachedTo, gameObject);
            var attachedColliderGroup = targetObject.AddComponent <VRMSpringBoneColliderGroup>();

            // Copy values
            attachedColliderGroup.Colliders = new VRMSpringBoneColliderGroup.SphereCollider[Colliders.Count];
            for (var i = 0; i < Colliders.Count; i++)
            {
                attachedColliderGroup.Colliders[i] = new VRMSpringBoneColliderGroup.SphereCollider()
                {
                    Offset = Colliders[i].Offset,
                    Radius = Colliders[i].Radius
                };
            }

            return(attachedColliderGroup);
        }
Пример #4
0
        public DynamicBone ToDynamicBone(GameObject gameObject)
        {
            var targetObject = HierarchyPath.ToGameObject(AttachedTo, gameObject);
            var attachedBone = targetObject.AddComponent <DynamicBone>();

            // Copy values
            attachedBone.m_Root              = HierarchyPath.ToTransform(m_Root, gameObject);
            attachedBone.m_UpdateRate        = m_UpdateRate;
            attachedBone.m_UpdateMode        = m_UpdateMode;
            attachedBone.m_Damping           = m_Damping;
            attachedBone.m_DampingDistrib    = m_DampingDistrib;
            attachedBone.m_Elasticity        = m_Elasticity;
            attachedBone.m_ElasticityDistrib = m_ElasticityDistrib;
            attachedBone.m_Stiffness         = m_Stiffness;
            attachedBone.m_StiffnessDistrib  = m_StiffnessDistrib;
            attachedBone.m_Inert             = m_Inert;
            attachedBone.m_InertDistrib      = m_InertDistrib;
            attachedBone.m_Radius            = m_Radius;
            attachedBone.m_RadiusDistrib     = m_RadiusDistrib;
            attachedBone.m_EndLength         = m_EndLength;
            attachedBone.m_EndOffset         = m_EndOffset;
            attachedBone.m_Gravity           = m_Gravity;
            attachedBone.m_Force             = m_Force;
            attachedBone.m_Colliders         = new List <DynamicBoneColliderBase>();
            foreach (var colliderAttachedObject in HierarchyPath.ToGameObjects(m_Colliders, gameObject))
            {
                var colliders = colliderAttachedObject.GetComponents <DynamicBoneCollider>();
                if (colliders != null)
                {
                    foreach (var collider in colliders)
                    {
                        attachedBone.m_Colliders.Add(collider);
                    }
                }
            }
            attachedBone.m_Exclusions       = HierarchyPath.ToTransforms(m_Exclusions, gameObject);
            attachedBone.m_FreezeAxis       = m_FreezeAxis;
            attachedBone.m_DistantDisable   = m_DistantDisable;
            attachedBone.m_ReferenceObject  = HierarchyPath.ToTransform(m_ReferenceObject, gameObject);
            attachedBone.m_DistanceToObject = m_DistanceToObject;

            return(attachedBone);
        }
        // Convert from VRMSpringBoneCollider
        public static SerializableSpringBoneColliderGroup FromSpringBoneColliderGroup(VRMSpringBoneColliderGroup colliderGroup)
        {
            Debug.Log($"Convert SpringBoneColliderGroup to serializable: Root={colliderGroup.transform.name}");

            var serializableCollider = new SerializableSpringBoneColliderGroup();

            serializableCollider.AttachedTo = HierarchyPath.FromTransform(colliderGroup.transform);

            // Copy values
            if (colliderGroup.Colliders != null)
            {
                foreach (var collider in colliderGroup.Colliders)
                {
                    serializableCollider.Colliders.Add(new SerializableSpringBoneCollider(collider.Offset, collider.Radius));
                }
            }

            return(serializableCollider);
        }
Пример #6
0
        public static SerializableDynamicBone FromDynamicBone(DynamicBone bone)
        {
            Debug.Log($"Convert DynamicBone to serializable: Root={bone.m_Root?.name}");

            var serializableBone = new SerializableDynamicBone();

            serializableBone.AttachedTo     = HierarchyPath.FromTransform(bone.gameObject.transform);
            serializableBone.TransformScale = bone.gameObject.transform.lossyScale;

            // Copy values
            serializableBone.m_Root              = HierarchyPath.FromTransform(bone.m_Root);
            serializableBone.m_UpdateRate        = bone.m_UpdateRate;
            serializableBone.m_UpdateMode        = bone.m_UpdateMode;
            serializableBone.m_Damping           = bone.m_Damping;
            serializableBone.m_DampingDistrib    = bone.m_DampingDistrib;
            serializableBone.m_Elasticity        = bone.m_Elasticity;
            serializableBone.m_ElasticityDistrib = bone.m_ElasticityDistrib;
            serializableBone.m_Stiffness         = bone.m_Stiffness;
            serializableBone.m_StiffnessDistrib  = bone.m_StiffnessDistrib;
            serializableBone.m_Inert             = bone.m_Inert;
            serializableBone.m_InertDistrib      = bone.m_InertDistrib;
            serializableBone.m_Radius            = bone.m_Radius;
            serializableBone.m_RadiusDistrib     = bone.m_RadiusDistrib;
            serializableBone.m_EndLength         = bone.m_EndLength;
            serializableBone.m_EndOffset         = bone.m_EndOffset;
            serializableBone.m_Gravity           = bone.m_Gravity;
            serializableBone.m_Force             = bone.m_Force;
            if (bone.m_Colliders != null)
            {
                serializableBone.m_Colliders = bone.m_Colliders.Select(c => HierarchyPath.FromTransform(c.gameObject.transform)).ToList();
            }
            if (bone.m_Exclusions != null)
            {
                serializableBone.m_Exclusions = bone.m_Exclusions.Select(e => HierarchyPath.FromTransform(e)).ToList();
            }
            serializableBone.m_FreezeAxis       = bone.m_FreezeAxis;
            serializableBone.m_DistantDisable   = bone.m_DistantDisable;
            serializableBone.m_ReferenceObject  = HierarchyPath.FromTransform(bone.m_ReferenceObject);
            serializableBone.m_DistanceToObject = bone.m_DistanceToObject;

            return(serializableBone);
        }
Пример #7
0
        public DynamicBoneCollider ToDynamicBoneCollider(GameObject gameObject)
        {
            var targetObject = HierarchyPath.ToGameObject(AttachedTo, gameObject);

            if (targetObject == null)
            {
                Debug.LogError($"GameObject to attatch collider is not found: {HierarchyPath.ReplaceRoot(AttachedTo, gameObject.name)}");
                return(null);
            }
            var attachedCollider = targetObject.AddComponent <DynamicBoneCollider>();

            // Todo: apply transform scale ratio
            // Copy values
            attachedCollider.m_Center    = m_Center;
            attachedCollider.m_Radius    = m_Radius;
            attachedCollider.m_Direction = m_Direction;
            attachedCollider.m_Bound     = m_Bound;
            attachedCollider.m_Height    = m_Height;

            return(attachedCollider);
        }
        public static SerializableSpringBone FromSpringBone(VRMSpringBone bone)
        {
            Debug.Log($"Convert SpringBone to serializable: Root={bone.RootBones[0].name}");

            var serializableBone = new SerializableSpringBone();

            serializableBone.AttachedTo = HierarchyPath.FromTransform(bone.gameObject.transform);

            // Copy values
            serializableBone.m_comment        = bone.m_comment;
            serializableBone.m_stiffnessForce = bone.m_stiffnessForce;
            serializableBone.m_gravityPower   = bone.m_gravityPower;
            serializableBone.m_gravityDir     = bone.m_gravityDir;
            serializableBone.m_dragForce      = bone.m_dragForce;
            if (bone.m_center != null)
            {
                serializableBone.m_center = HierarchyPath.FromTransform(bone.m_center);
            }
            if (bone.RootBones != null)
            {
                foreach (var rootBone in bone.RootBones)
                {
                    serializableBone.RootBones.Add(HierarchyPath.FromTransform(rootBone));
                }
            }
            serializableBone.m_hitRadius = bone.m_hitRadius;
            if (bone.ColliderGroups != null)
            {
                foreach (var colliderGroup in bone.ColliderGroups)
                {
                    serializableBone.ColliderGroups.Add(HierarchyPath.FromTransform(colliderGroup.transform));
                }
            }

            return(serializableBone);
        }