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

Unity自定义编辑器:选中TextArea时修改值不实时显示问题求助

Unity自定义编辑器TextArea实时更新问题解决方案
  • 核心解决步骤:在按钮点击时先强制TextArea失去焦点,再修改文本并重绘窗口

修改按钮点击逻辑,添加强制失焦代码:

// 示例按钮点击逻辑
if (GUILayout.Button("Bold", GUILayout.Height(30), GUILayout.Width(80)))
{
    // 强制清空键盘焦点,让TextArea失去输入状态
    GUIUtility.keyboardControl = 0;
    // 执行格式添加操作
    textEditor.AddFormat(textEditor.textFormats[i]);
    // 重绘编辑器窗口
    Repaint();
}

同时确保你的AddFormat方法确实在修改绑定到TextArea的文本变量:

public void AddFormat(TextFormat _format)
{
    // 确保修改的是绑定到TextArea的text字段,而非局部变量
    textEditor.text += _format.openingTag + " " + _format.closingTag;
}

问题原因

Unity的EditorGUILayout.TextArea在获得键盘焦点时,会维护一个内部输入缓冲区,此时不会主动读取绑定的text变量值。只有当它失去焦点时,才会将缓冲区内容同步到变量,同时读取变量最新值刷新显示。直接修改变量后调用Repaint(),因TextArea仍处于焦点状态,不会触发显示更新。强制设置GUIUtility.keyboardControl = 0会立刻让TextArea失去焦点,触发变量同步和显示刷新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:52:07