diff --git a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneCollider.cs b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneCollider.cs index c33c12dd0..5f3da4974 100644 --- a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneCollider.cs +++ b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneCollider.cs @@ -8,7 +8,7 @@ namespace UniVRM10 Sphere, Capsule, Plane, - SphereIside, + SphereInside, } [Serializable] @@ -56,7 +56,7 @@ namespace UniVRM10 DrawPlane(transform.localToWorldMatrix, Offset, Normal, Radius); break; - case VRM10SpringBoneColliderTypes.SphereIside: + case VRM10SpringBoneColliderTypes.SphereInside: Gizmos.color = Color.cyan; Gizmos.DrawWireSphere(Offset, Radius); break; diff --git a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs index 62144854f..86b753389 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs @@ -324,6 +324,57 @@ namespace UniVRM10 return shape; } + static UniGLTF.Extensions.VRMC_springBone_extended_collider.ExtendedColliderShape ExportShapeExtended(VRM10SpringBoneCollider z) + { + var shape = new UniGLTF.Extensions.VRMC_springBone_extended_collider.ExtendedColliderShape(); + switch (z.ColliderType) + { + case VRM10SpringBoneColliderTypes.Sphere: + { + shape.Sphere = new UniGLTF.Extensions.VRMC_springBone_extended_collider.ExtendedColliderShapeSphere + { + Radius = z.Radius, + Offset = ReverseX(z.Offset), + }; + break; + } + + case VRM10SpringBoneColliderTypes.Capsule: + { + shape.Capsule = new UniGLTF.Extensions.VRMC_springBone_extended_collider.ExtendedColliderShapeCapsule + { + Radius = z.Radius, + Offset = ReverseX(z.Offset), + Tail = ReverseX(z.Tail), + }; + break; + } + + case VRM10SpringBoneColliderTypes.SphereInside: + { + shape.Sphere = new UniGLTF.Extensions.VRMC_springBone_extended_collider.ExtendedColliderShapeSphere + { + Radius = z.Radius, + Offset = ReverseX(z.Offset), + Inside = true, + }; + break; + } + + case VRM10SpringBoneColliderTypes.Plane: + { + shape.Plane = new UniGLTF.Extensions.VRMC_springBone_extended_collider.ExtendedColliderShapePlane + { + Offset = ReverseX(z.Offset), + Normal = ReverseX(z.Normal), + }; + break; + } + break; + } + return shape; + } + static UniGLTF.Extensions.VRMC_springBone.SpringBoneJoint ExportJoint(VRM10SpringBoneJoint y, Func getIndexFromTransform) { var joint = new UniGLTF.Extensions.VRMC_springBone.SpringBoneJoint @@ -369,11 +420,19 @@ namespace UniVRM10 foreach (var c in colliders) { - springBone.Colliders.Add(new UniGLTF.Extensions.VRMC_springBone.Collider + var exportCollider = new UniGLTF.Extensions.VRMC_springBone.Collider { Node = getNodeIndexFromTransform(c.transform), Shape = ExportShape(c), - }); + }; + if (c.ColliderType == VRM10SpringBoneColliderTypes.SphereInside || c.ColliderType == VRM10SpringBoneColliderTypes.Plane) + { + exportCollider.Extensions = new UniGLTF.Extensions.VRMC_springBone_extended_collider.VRMC_springBone_extended_collider + { + Shape = ExportShapeExtended(c), + }; + } + springBone.Colliders.Add(exportCollider); } // colliderGroups diff --git a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs index 8f66a9c37..f200a7dd0 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs @@ -551,7 +551,7 @@ namespace UniVRM10 collider.Radius = exSphere.Radius.Value; if (exSphere.Inside.HasValue && exSphere.Inside.Value) { - collider.ColliderType = VRM10SpringBoneColliderTypes.SphereIside; + collider.ColliderType = VRM10SpringBoneColliderTypes.SphereInside; } } else if (exCollider.Shape.Capsule is UniGLTF.Extensions.VRMC_springBone_extended_collider.ExtendedColliderShapeCapsule exCapsule)