暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

ScrollbarEditor.cs 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. namespace UnityEditor.UI
  5. {
  6. [CustomEditor(typeof(Scrollbar), true)]
  7. [CanEditMultipleObjects]
  8. /// <summary>
  9. /// Custom Editor for the Scrollbar Component.
  10. /// Extend this class to write a custom editor for a component derived from Scrollbar.
  11. /// </summary>
  12. public class ScrollbarEditor : SelectableEditor
  13. {
  14. SerializedProperty m_HandleRect;
  15. SerializedProperty m_Direction;
  16. SerializedProperty m_Value;
  17. SerializedProperty m_Size;
  18. SerializedProperty m_NumberOfSteps;
  19. SerializedProperty m_OnValueChanged;
  20. protected override void OnEnable()
  21. {
  22. base.OnEnable();
  23. m_HandleRect = serializedObject.FindProperty("m_HandleRect");
  24. m_Direction = serializedObject.FindProperty("m_Direction");
  25. m_Value = serializedObject.FindProperty("m_Value");
  26. m_Size = serializedObject.FindProperty("m_Size");
  27. m_NumberOfSteps = serializedObject.FindProperty("m_NumberOfSteps");
  28. m_OnValueChanged = serializedObject.FindProperty("m_OnValueChanged");
  29. }
  30. public override void OnInspectorGUI()
  31. {
  32. base.OnInspectorGUI();
  33. EditorGUILayout.Space();
  34. serializedObject.Update();
  35. // EditorGUILayout.PropertyField(m_HandleRect);
  36. EditorGUI.BeginChangeCheck();
  37. RectTransform newRectTransform = EditorGUILayout.ObjectField("Handle Rect", m_HandleRect.objectReferenceValue, typeof(RectTransform), true) as RectTransform;
  38. if (EditorGUI.EndChangeCheck())
  39. {
  40. // Handle Rect will modify its GameObject RectTransform drivenBy, so we need to Record the old and new RectTransform.
  41. List<Object> modifiedObjects = new List<Object>();
  42. modifiedObjects.Add(newRectTransform);
  43. foreach (var target in m_HandleRect.serializedObject.targetObjects)
  44. {
  45. MonoBehaviour mb = target as MonoBehaviour;
  46. if (mb == null)
  47. continue;
  48. modifiedObjects.Add(mb);
  49. modifiedObjects.Add(mb.GetComponent<RectTransform>());
  50. }
  51. Undo.RecordObjects(modifiedObjects.ToArray(), "Change Handle Rect");
  52. m_HandleRect.objectReferenceValue = newRectTransform;
  53. }
  54. if (m_HandleRect.objectReferenceValue != null)
  55. {
  56. EditorGUI.BeginChangeCheck();
  57. EditorGUILayout.PropertyField(m_Direction);
  58. if (EditorGUI.EndChangeCheck())
  59. {
  60. Undo.RecordObjects(serializedObject.targetObjects, "Change Scrollbar Direction");
  61. Scrollbar.Direction direction = (Scrollbar.Direction)m_Direction.enumValueIndex;
  62. foreach (var obj in serializedObject.targetObjects)
  63. {
  64. Scrollbar scrollbar = obj as Scrollbar;
  65. scrollbar.SetDirection(direction, true);
  66. }
  67. }
  68. EditorGUILayout.PropertyField(m_Value);
  69. EditorGUILayout.PropertyField(m_Size);
  70. EditorGUILayout.PropertyField(m_NumberOfSteps);
  71. bool warning = false;
  72. foreach (var obj in serializedObject.targetObjects)
  73. {
  74. Scrollbar scrollbar = obj as Scrollbar;
  75. Scrollbar.Direction dir = scrollbar.direction;
  76. if (dir == Scrollbar.Direction.LeftToRight || dir == Scrollbar.Direction.RightToLeft)
  77. warning = (scrollbar.navigation.mode != Navigation.Mode.Automatic && scrollbar.navigation.mode != Navigation.Mode.Horizontal && (scrollbar.FindSelectableOnLeft() != null || scrollbar.FindSelectableOnRight() != null));
  78. else
  79. warning = (scrollbar.navigation.mode != Navigation.Mode.Automatic && scrollbar.navigation.mode != Navigation.Mode.Vertical && (scrollbar.FindSelectableOnDown() != null || scrollbar.FindSelectableOnUp() != null));
  80. }
  81. if (warning)
  82. EditorGUILayout.HelpBox("The selected scrollbar direction conflicts with navigation. Not all navigation options may work.", MessageType.Warning);
  83. EditorGUILayout.Space();
  84. // Draw the event notification options
  85. EditorGUILayout.PropertyField(m_OnValueChanged);
  86. }
  87. else
  88. {
  89. EditorGUILayout.HelpBox("Specify a RectTransform for the scrollbar handle. It must have a parent RectTransform that the handle can slide within.", MessageType.Info);
  90. }
  91. serializedObject.ApplyModifiedProperties();
  92. }
  93. }
  94. }