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; } } } } } }
/// <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(); }