diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs index f66015a74..73593b46c 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs @@ -362,19 +362,25 @@ namespace Spine.Unity.Modules { var skin = skeleton.Skin ?? skeleton.Data.DefaultSkin; var attachments = new List(); - foreach (Slot s in skeleton.Slots) { - if (s.bone == b) { - skin.FindAttachmentsForSlot(skeleton.Slots.IndexOf(s), attachments); + foreach (Slot slot in skeleton.Slots) { + if (slot.bone == b) { + skin.FindAttachmentsForSlot(skeleton.Slots.IndexOf(slot), attachments); + + bool bbAttachmentAdded = false; foreach (var a in attachments) { var bbAttachment = a as BoundingBoxAttachment; if (bbAttachment != null) { if (!a.Name.ToLower().Contains(AttachmentNameMarker)) continue; - var bbCollider = SkeletonUtility.AddBoundingBoxAsComponent(bbAttachment, s, go, isTrigger: false, isKinematic: false, gravityScale: gravityScale); + bbAttachmentAdded = true; + var bbCollider = SkeletonUtility.AddBoundingBoxAsComponent(bbAttachment, slot, go, isTrigger: false); colliders.Add(bbCollider); } } + + if (bbAttachmentAdded) + SkeletonUtility.AddBoneRigidbody2D(go, isKinematic: false, gravityScale: gravityScale); } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtility.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtility.cs index f580f86f5..bcbf4cff3 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtility.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtility.cs @@ -73,18 +73,8 @@ namespace Spine.Unity { return AddBoundingBoxAsComponent(box, slot, go, isTrigger); } - public static PolygonCollider2D AddBoundingBoxAsComponent (BoundingBoxAttachment box, Slot slot, GameObject gameObject, bool isTrigger = true, bool isKinematic = true, float gravityScale = 0f) { + public static PolygonCollider2D AddBoundingBoxAsComponent (BoundingBoxAttachment box, Slot slot, GameObject gameObject, bool isTrigger = true) { if (box == null) return null; - - if (slot.bone != slot.Skeleton.RootBone) { - var rb = gameObject.GetComponent(); - if (rb == null) { - rb = gameObject.AddComponent(); - rb.isKinematic = isKinematic; - rb.gravityScale = gravityScale; - } - } - var collider = gameObject.AddComponent(); collider.isTrigger = isTrigger; SetColliderPointsLocal(collider, slot, box); @@ -114,6 +104,16 @@ namespace Spine.Unity { return bounds; } + + public static Rigidbody2D AddBoneRigidbody2D (GameObject gameObject, bool isKinematic = true, float gravityScale = 0f) { + var rb = gameObject.GetComponent(); + if (rb == null) { + rb = gameObject.AddComponent(); + rb.isKinematic = isKinematic; + rb.gravityScale = gravityScale; + } + return rb; + } #endregion public delegate void SkeletonUtilityDelegate (); diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs index 771045010..b80c59672 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs @@ -222,6 +222,7 @@ namespace Spine.Unity { } public void AddBoundingBox (string skinName, string slotName, string attachmentName) { + SkeletonUtility.AddBoneRigidbody2D(transform.gameObject); SkeletonUtility.AddBoundingBoxGameObject(bone.skeleton, skinName, slotName, attachmentName, transform); }