protected override void DoWindow(int windowId) { float labelWidth = EditorGUIUtility.labelWidth; bool wideMode = EditorGUIUtility.wideMode; EditorGUIUtility.wideMode = true; EditorGUILayout.BeginHorizontal(); string[] names = spriteMeshCache.GetBoneNames("None"); int index = spriteMeshCache.bindPoses.IndexOf(spriteMeshCache.selectedBindPose); index = EditorGUILayout.Popup(index + 1, names, GUILayout.Width(75f)) - 1; if (index >= 0 && index < spriteMeshCache.bindPoses.Count) { spriteMeshCache.selectedBindPose = spriteMeshCache.bindPoses[index]; } else { spriteMeshCache.selectedBindPose = null; } EditorGUI.BeginChangeCheck(); EditorGUI.BeginDisabledGroup(spriteMeshCache.selectedBindPose == null); if (Event.current.type == EventType.MouseUp || Event.current.type == EventType.MouseDown) { m_Weight = 0f; m_TempWeights.Clear(); if (spriteMeshCache.selection.Count == 0) { m_TempWeights = spriteMeshCache.boneWeights.ToList(); } else { m_TempWeights = spriteMeshCache.selectedNodes.ConvertAll(n => spriteMeshCache.GetBoneWeight(n)); } } EditorGUIUtility.fieldWidth = 35f; m_Weight = EditorGUILayout.Slider(m_Weight, -1f, 1f); EditorGUIUtility.fieldWidth = 0f; if (EditorGUI.EndChangeCheck()) { spriteMeshCache.RegisterUndo("modify weights"); List <Node> nodes = null; if (spriteMeshCache.selection.Count == 0) { nodes = spriteMeshCache.nodes; } else { nodes = spriteMeshCache.selectedNodes; } for (int i = 0; i < nodes.Count; i++) { Node node = nodes[i]; BoneWeight tempWeight = m_TempWeights[i]; tempWeight.SetBoneIndexWeight(index, tempWeight.GetBoneWeight(index) + m_Weight, !EditorGUI.actionKey, true); spriteMeshCache.SetBoneWeight(node, tempWeight); } } EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(new GUIContent("Smooth", "Smooth weights"))) { spriteMeshCache.RegisterUndo("smooth weights"); List <Node> targetNodes = spriteMeshCache.nodes; if (spriteMeshCache.selection.Count > 0) { targetNodes = spriteMeshCache.selectedNodes; } spriteMeshCache.SmoothWeights(targetNodes); } if (GUILayout.Button(new GUIContent("Auto", "Calculate automatic weights"))) { spriteMeshCache.RegisterUndo("calculate weights"); List <Node> targetNodes = spriteMeshCache.nodes; if (spriteMeshCache.selection.Count > 0) { targetNodes = spriteMeshCache.selectedNodes; } spriteMeshCache.CalculateAutomaticWeights(targetNodes); } GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); EditorGUIUtility.labelWidth = 50f; overlayColors = EditorGUILayout.Toggle("Overlay", overlayColors); EditorGUIUtility.labelWidth = 30f; showPie = EditorGUILayout.Toggle("Pies", showPie); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); EditorGUIUtility.labelWidth = labelWidth; EditorGUIUtility.wideMode = wideMode; }