You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity编辑器窗口开发:如何获取滑块Thumb的实际位置?

Unity编辑器跨轨道滑块竖线实现方案

最优方案:滑块后单独绘制竖线

不用折腾Thumb的Style,也不用自己写滑块,核心是通过滑块的Rect计算竖线位置,额外绘制即可:

  1. 绘制滑块后立刻用GUILayoutUtility.GetLastRect()拿到滑块在窗口内的矩形区域。
  2. 根据滑块当前值、最小值、最大值,计算竖线的X坐标:
    float lineX = sliderRect.x + (currentSliderValue - minVal) / (maxVal - minVal) * sliderRect.width;
    
  3. 用Handles.DrawLine()绘制横跨轨道的竖线,注意要切换到GUI空间:
    // 假设trackArea是你定义的轨道区域Rect(比如窗口内从Y=60到底部的区域)
    Rect trackArea = new Rect(0, 60, position.width, position.height - 70);
    
    Handles.BeginGUI();
    Handles.color = Color.white;
    Handles.DrawLine(new Vector2(lineX, trackArea.y), new Vector2(lineX, trackArea.yMax));
    Handles.EndGUI();
    
    这个方法完全不影响滑块的原有交互,只是在它上面叠了一条线,逻辑简单还高效。

备选方案:扩展滑块Thumb的绘制范围

如果一定要用Thumb实现,可以修改GUIStyle的overflow属性突破滑块区域限制:

  • 复制EditorStyles.sliderThumb的样式,调整overflow让Thumb能绘制到滑块外面:
    GUIStyle customThumbStyle = new GUIStyle(EditorStyles.sliderThumb);
    // 上下方向扩展绘制范围,数值根据轨道高度调整
    customThumbStyle.overflow = new RectOffset(0, 0, -200, -200);
    // 给Thumb设置一个足够高的纹理,或者用Style的normal.background绘制竖线
    customThumbStyle.normal.background = EditorGUIUtility.Load("VerticalLineTexture") as Texture2D;
    
    但这个方法兼容性差,不同Unity版本的Slider绘制逻辑可能会限制Thumb的显示范围,不如第一种方案可靠。

内容的提问来源于stack exchange,提问作者coldbreath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:32:45