public static List <SpriteBoneData> CreateSpriteBoneData(List <SpriteBone> spriteBoneList, Matrix4x4 rootMatrix) { List <SpriteBoneData> spriteBoneDataList = new List <SpriteBoneData>(spriteBoneList.Count); foreach (var spriteBone in spriteBoneList) { spriteBoneDataList.Add(new SpriteBoneData() { name = spriteBone.name, parentId = spriteBone.parentId, localPosition = spriteBone.position, localRotation = spriteBone.rotation, depth = spriteBone.position.z, length = spriteBone.length }); } Matrix4x4[] localToWorldMatrices = null; MeshModuleUtility.UpdateLocalToWorldMatrices(spriteBoneDataList, rootMatrix, ref localToWorldMatrices); for (int i = 0; i < spriteBoneDataList.Count; ++i) { var spriteBoneData = spriteBoneDataList[i]; spriteBoneData.position = localToWorldMatrices[i].MultiplyPoint(Vector2.zero); spriteBoneData.endPosition = localToWorldMatrices[i].MultiplyPoint(Vector2.right * spriteBoneData.length); } return(spriteBoneDataList); }
private void UpdateBindPose() { MeshModuleUtility.UpdateLocalToWorldMatrices(spriteMeshData.bones, spriteMeshData.CalculateRootMatrix(), ref m_BindPose); for (int i = 0; i < m_BindPose.Length; ++i) { m_BindPose[i] = m_BindPose[i].inverse; } }
private void UpdateBones() { MeshModuleUtility.UpdateLocalToWorldMatrices(spriteMeshData.bones, spriteMeshData.CalculateRootMatrix(), ref m_LocalToWorldMatrices); spriteMeshData.UpdateSpriteBoneDataWorldPosition(m_LocalToWorldMatrices); if (onSkinPreviewChanged != null) { onSkinPreviewChanged.Invoke(); } }