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); }
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); }
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); }
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); }
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); }