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

Unity Editor Window中TextField宽度固定与搜索布局修复问题

Script Finder Unity编辑器窗口:滚动条消失与间距异常问题

问题说明

我做了个叫Script Finder的Unity编辑器窗口,用来显示挂载了非Unity命名空间脚本的GameObject和对应的脚本名。现在碰到俩问题:

  • 问题1:用搜索框过滤脚本名时,右侧垂直滚动条消失,导致Script对应的TextField被拉宽,黄色“Script”标签和输入框对不齐。
  • 问题2:调整代码后,搜索结果之间出现大片空白间隔。

代码片段

原始代码

// 粘贴你的原始代码到此处

修改后的代码

// 粘贴你修改后的代码到此处

相关截图

解决办法

针对滚动条消失与对齐问题

Unity编辑器的ScrollView布局宽度约束是关键,滚动条的显示/隐藏会占用宽度,得提前做好计算:

  1. 把搜索框放在ScrollView外部,避免干扰滚动区域的布局计算逻辑。
  2. 给标签和TextField设置固定宽度,或者按比例分配空间,确保滚动条出现时布局不会偏移。示例代码:
float windowWidth = EditorGUIUtility.currentViewWidth - 16; // 减去窗口边距
float scrollbarWidth = GUI.skin.verticalScrollbar.fixedWidth;

using (var scrollScope = new EditorGUILayout.ScrollViewScope(_scrollPos))
{
    _scrollPos = scrollScope.scrollPosition;
    foreach (var entry in filteredResults)
    {
        EditorGUILayout.BeginHorizontal();
        // 固定标签宽度,防止拉伸错位
        EditorGUILayout.LabelField("GameObject", GUILayout.Width(90));
        // 根据滚动条是否显示调整可用宽度
        float objNameWidth = windowWidth - 300 - (scrollScope.scrollPosition.y > 0 ? scrollbarWidth : 0);
        EditorGUILayout.LabelField(entry.GameObjName, GUILayout.Width(objNameWidth));
        EditorGUILayout.LabelField("Script", GUILayout.Width(60));
        EditorGUILayout.TextField(entry.ScriptName, GUILayout.Width(180));
        EditorGUILayout.EndHorizontal();
    }
}
  1. 也可以用GUILayout.FlexibleSpace()填充空白区域,让TextField仅占用剩余宽度,但要确保标签宽度固定。

针对空白间隔过大问题

空白间隔通常是多余布局代码或元素高度未约束导致的:

  1. 检查修改后的代码,删除多余的EditorGUILayout.Space()调用或空行。
  2. 给每行的Horizontal布局添加固定高度约束,比如GUILayout.Height(EditorGUIUtility.singleLineHeight),保证每行高度统一。
  3. 确认ScrollView内的所有元素都正确包裹在BeginHorizontal()和EndHorizontal()之间,避免因未闭合导致的布局错乱。

如果问题仍存在,检查filteredResults中是否包含空元素,或用Debug.Log()打印每行布局的高度参数,排查计算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:53:00