效果示意

代码示例
using UnityEngine;
using UnityEditor;
public class ExampleEditorWindow : EditorWindow
{
private Vector2 lScrollPosition, rScrollPosition;
private const float splitterWidth = 2f;
private float splitterPos;
private Rect splitterRect;
private bool isDragging;
[MenuItem("SKFramework/Example Editor Window")]
public static void Open()
{
GetWindow<ExampleEditorWindow>().Show();
}
private void OnEnable()
{
splitterPos = position.width * .3f;
}
internal void OnGUI()
{
GUILayout.BeginHorizontal();
{
lScrollPosition = GUILayout.BeginScrollView(lScrollPosition, GUILayout.Width(splitterPos), GUILayout.MaxWidth(splitterPos), GUILayout.MinWidth(splitterPos));
OnLeftGUI();
GUILayout.EndScrollView();
GUILayout.Box(string.Empty, GUILayout.Width(splitterWidth), GUILayout.MaxWidth(splitterWidth), GUILayout.MinWidth(splitterWidth), GUILayout.ExpandHeight(true));
splitterRect = GUILayoutUtility.GetLastRect();
rScrollPosition = GUILayout.BeginScrollView(rScrollPosition, GUILayout.ExpandWidth(true));
OnRightGUI();
GUILayout.EndScrollView();
}
GUILayout.EndHorizontal();
if (Event.current != null)
{
EditorGUIUtility.AddCursorRect(splitterRect, MouseCursor.ResizeHorizontal);
switch (Event.current.rawType)
{
case EventType.MouseDown:
isDragging = splitterRect.Contains(Event.current.mousePosition);
break;
case EventType.MouseDrag:
if (isDragging)
{
splitterPos += Event.current.delta.x;
splitterPos = Mathf.Clamp(splitterPos, position.width * .2f, position.width * .8f);
Repaint();
}
break;
case EventType.MouseUp:
if (isDragging)
isDragging = false;
break;
}
}
}
private void OnLeftGUI()
{
GUILayout.Box("左侧区域", GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true));
}
private void OnRightGUI()
{
GUILayout.Box("右侧区域", GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true));
}
}