Esempio n. 1
0
        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();
            }
        }