Ejemplo n.º 1
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            if (um.vertControlTrans != null && um.vertControlTrans.Length > 0)
            {
                foreach (Transform child in um.vertControlTrans)
                {
                    if (um.isEdit)
                    {
                        if (child.gameObject.activeSelf)
                        {
                            break;
                        }
                        else
                        {
                            child.gameObject.SetActive(true);
                        }
                    }
                    else
                    {
                        if (!child.gameObject.activeSelf)
                        {
                            break;
                        }
                        else
                        {
                            child.gameObject.SetActive(false);
                        }
                    }
                }
            }
            //Modify bindPose by hand
            if (um.bindposes != null && um.bindposes.Length > 0)
            {
                GUILayout.Space(20f);
                GUILayout.Label("Press shift to speed up");
                GUILayout.BeginHorizontal();
                if (GUILayout.Button("BindPose Left Move"))
                {
                    for (int i = 0; i < um.bindposes.Length; ++i)
                    {
                        Matrix4x4 m = um.bindposes[i];
                        m.m03          -= Event.current.shift ? 0.1f:0.01f;
                        um.bindposes[i] = m;
                    }
                    um.UpdateSkinnedMesh();
                    if (!Application.isPlaying)
                    {
                        UnityEditor.EditorUtility.SetDirty(um);
                    }
                }
                if (GUILayout.Button("BindPose Right Move"))
                {
                    for (int i = 0; i < um.bindposes.Length; ++i)
                    {
                        Matrix4x4 m = um.bindposes[i];
                        m.m03          += Event.current.shift ? 0.1f:0.01f;
                        um.bindposes[i] = m;
                    }
                    um.UpdateSkinnedMesh();
                    if (!Application.isPlaying)
                    {
                        UnityEditor.EditorUtility.SetDirty(um);
                    }
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                if (GUILayout.Button("BindPose Up Move"))
                {
                    for (int i = 0; i < um.bindposes.Length; ++i)
                    {
                        Matrix4x4 m = um.bindposes[i];
                        m.m13          += Event.current.shift ? 0.1f:0.01f;
                        um.bindposes[i] = m;
                    }
                    um.UpdateSkinnedMesh();
                    if (!Application.isPlaying)
                    {
                        UnityEditor.EditorUtility.SetDirty(um);
                    }
                }
                if (GUILayout.Button("BindPose Down Move"))
                {
                    for (int i = 0; i < um.bindposes.Length; ++i)
                    {
                        Matrix4x4 m = um.bindposes[i];
                        m.m13          -= Event.current.shift ? 0.1f:0.01f;
                        um.bindposes[i] = m;
                    }
                    um.UpdateSkinnedMesh();
                    if (!Application.isPlaying)
                    {
                        UnityEditor.EditorUtility.SetDirty(um);
                    }
                }
                GUILayout.EndHorizontal();


                GUILayout.BeginHorizontal();
                if (GUILayout.Button("BindPose Rotate +"))
                {
                    Matrix4x4 rotate = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 0, Event.current.shift ? 1f:0.1f), Vector3.one);
                    for (int i = 0; i < um.bindposes.Length; ++i)
                    {
                        Matrix4x4 m = um.bindposes[i];
                        um.bindposes[i] = m * rotate;
                    }
                    um.UpdateSkinnedMesh();
                    if (!Application.isPlaying)
                    {
                        UnityEditor.EditorUtility.SetDirty(um);
                    }
                }
                if (GUILayout.Button("BindPose Rotate -"))
                {
                    Matrix4x4 rotate = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 0, -(Event.current.shift ? 1f:0.1f)), Vector3.one);
                    for (int i = 0; i < um.bindposes.Length; ++i)
                    {
                        Matrix4x4 m = um.bindposes[i];
                        um.bindposes[i] = m * rotate;
                    }
                    um.UpdateSkinnedMesh();
                    if (!Application.isPlaying)
                    {
                        UnityEditor.EditorUtility.SetDirty(um);
                    }
                }
                GUILayout.EndHorizontal();
            }
            if (!Application.isPlaying && um.isEdit)
            {
                GUILayout.Space(5);
                if (GUILayout.Button("Save To Pose"))
                {
                    Armature armature = um.GetComponentInParent <Armature> ();
                    if (armature && armature.poseData)
                    {
                        for (int i = 0; i < armature.uiAttachments.Length; ++i)
                        {
                            UnityEngine.UI.MaskableGraphic render = armature.uiAttachments [i];
                            if (um.gameObject == render.gameObject)
                            {
                                PoseData.DisplayData dd = armature.poseData.displayDatas [i];
                                dd.color  = um.color;
                                dd.vertex = (Vector3[])um.vertices.Clone();
                                armature.poseData.displayDatas [i] = dd;

                                AssetDatabase.Refresh();
                                EditorUtility.SetDirty(armature.poseData);
                                AssetDatabase.SaveAssets();
                                break;
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Sets to pose.
        /// </summary>
        public void SetToPose()
        {
            if (poseData)
            {
                for (int i = 0; i < poseData.boneDatas.Length && i < bones.Length; ++i)
                {
                    Transform bone = bones[i];
                    if (bone)
                    {
                        PoseData.TransformData transData = poseData.boneDatas[i];
                        bone.localPosition    = new Vector3(transData.x, transData.y, bone.localPosition.z);
                        bone.localScale       = new Vector3(transData.sx, transData.sy, bone.localScale.z);
                        bone.localEulerAngles = new Vector3(bone.localEulerAngles.x, bone.localEulerAngles.y, transData.rotation);
                    }
                }
                for (int i = 0; i < poseData.slotDatas.Length && i < slots.Length; ++i)
                {
                    Slot slot = slots[i];
                    if (slot)
                    {
                        slot.color        = poseData.slotDatas[i].color;
                        slot.displayIndex = poseData.slotDatas[i].displayIndex;
                        slot.z            = poseData.slotDatas[i].zorder;
                    }
                    m_SortedSlots = null;
                }
                if (isUGUI)
                {
                    for (int i = 0; i < poseData.displayDatas.Length && i < uiAttachments.Length; ++i)
                    {
                        MaskableGraphic mg = uiAttachments[i];
                        if (mg)
                        {
                            PoseData.DisplayData displayData = poseData.displayDatas[i];
                            switch (displayData.type)
                            {
                            case PoseData.AttachmentType.IMG:
                                UIFrame uf = mg.GetComponent <UIFrame>();
                                if (uf)
                                {
                                    uf.color = displayData.color;
                                }
                                else
                                {
                                    Image img = mg.GetComponent <Image>();
                                    if (img)
                                    {
                                        img.color = displayData.color;
                                    }
                                }
                                break;

                            case PoseData.AttachmentType.MESH:
                                UIMesh um = mg.GetComponent <UIMesh> ();
                                um.vertices = (Vector3[])displayData.vertex.Clone();
                                if (um.vertControlTrans != null && um.vertControlTrans.Length > 0)
                                {
                                    for (int j = 0; j < um.vertControlTrans.Length && j < um.vertices.Length; ++j)
                                    {
                                        Transform vctr = um.vertControlTrans [j];
                                        if (vctr)
                                        {
                                            vctr.localPosition = um.vertices [j];
                                        }
                                    }
                                }
                                break;
                            }
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < poseData.displayDatas.Length && i < attachments.Length; ++i)
                    {
                        Renderer r = attachments[i];
                        if (r)
                        {
                            PoseData.DisplayData displayData = poseData.displayDatas[i];
                            switch (displayData.type)
                            {
                            case PoseData.AttachmentType.IMG:
                                SpriteFrame sf = r.GetComponent <SpriteFrame>();
                                if (sf)
                                {
                                    sf.color = displayData.color;
                                }
                                else
                                {
                                    SpriteRenderer sr = r.GetComponent <SpriteRenderer>();
                                    if (sr)
                                    {
                                        sr.color = displayData.color;
                                    }
                                }
                                break;

                            case PoseData.AttachmentType.MESH:
                                SpriteMesh sm = r.GetComponent <SpriteMesh>();
                                sm.vertices = (Vector3[])displayData.vertex.Clone();
                                if (sm.vertControlTrans != null)
                                {
                                    for (int j = 0; j < sm.vertControlTrans.Length && j < sm.vertices.Length; ++j)
                                    {
                                        Transform vctr = sm.vertControlTrans[j];
                                        if (vctr)
                                        {
                                            vctr.localPosition = sm.vertices[j];
                                        }
                                    }
                                }
                                break;
                            }
                        }
                    }
                }
            }
            ResetSlotZOrder();
        }