最近使用Spine的時候,Spine在動畫編輯中修改了碰撞框形狀,導入到unity中使用BoundingBoxFollower腳本,發如今Spine碰撞框形狀修改的時候,不會自動跟隨更新。ide
後來到Spine官方論壇查到資料才發現:動畫
大概意思就是Unity的PolygonCollider2D設計初衷不支持動態改變形狀,若是改變的話將會耗費大量的計算和意想不到的錯誤。若是非要修改的話,Spine sdk的數據是正常的,能夠本身進行變動。可是沒有說如何變動。查看了源代碼,嘗試出來了,設計
在BoundingBoxFollower中添加以下代碼能夠刷新碰撞塊形狀:3d
[ContextMenu("UpdateBoundingBox")] void UpdateBoundingBox(){ var worldVerts = new float[CurrentAttachment.Vertices.Length]; CurrentAttachment.ComputeWorldVertices(slot, worldVerts); int worldVertsLength = worldVerts.Length; int bufferTargetSize = worldVertsLength >> 1; Vector2[] buffer = new Vector2[bufferTargetSize]; var floats = worldVerts; Vector3 vert = Vector3.zero; for (int i = 0, n = worldVertsLength >> 1; i < n; i++) { int j = i * 2; vert.x = floats[j]; vert.y = floats[j + 1]; vert.z = 0; float aaa = vert.x; float bbb = vert.y; Slot.Bone.WorldToLocal (aaa, bbb, out aaa, out bbb); vert.x = aaa; vert.y = bbb; buffer[i] = vert; } CurrentCollider.SetPath (0, buffer); }