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

Unity Editor中EditorGUILayout.TextField无法更新输入值问题咨询

问题分析与解决方案

这个问题我太熟了,刚接触Unity编辑器窗口开发的时候也踩过一模一样的坑!咱们一步步拆解原因和解决办法:

为什么inputText始终是默认值?

核心原因有两个:

  1. 变量作用域错误:如果你是在OnGUI()方法内部声明并初始化inputText(比如string inputText = "abcd";),那么每次OnGUI执行(窗口刷新、点击按钮、按回车都会触发),这个变量都会被重新赋值为默认值"abcd",用户输入的内容根本留不住。
  2. 没有接收TextField的返回值:Unity的EditorGUILayout.TextField或GUILayout.TextField控件不会直接修改你传入的字符串变量(因为string是不可变值类型),它的返回值才是用户修改后的新内容。如果不把返回值重新赋值给inputText,变量自然不会更新。

正确的解决代码

把inputText改成窗口类的成员变量,并确保接收TextField的返回值,代码示例如下:

using UnityEditor;
using UnityEngine;

public class CustomInputWindow : EditorWindow
{
    // 将inputText声明为类的成员变量,保存窗口的状态
    private string inputText = "abcd";

    // 给窗口添加菜单栏入口
    [MenuItem("Window/Custom Input Window")]
    public static void ShowCustomWindow()
    {
        GetWindow<CustomInputWindow>("Input Test");
    }

    private void OnGUI()
    {
        // 关键:将TextField的返回值重新赋值给inputText,保存用户输入
        inputText = EditorGUILayout.TextField("输入内容:", inputText);

        if (GUILayout.Button("打印到控制台"))
        {
            Debug.Log($"用户输入:{inputText}");
        }
    }
}

可选优化:持久化输入内容

如果希望关闭窗口再打开后,之前输入的内容还能保留,可以用EditorPrefs做持久化存储:

private void OnEnable()
{
    // 窗口打开时加载保存的内容,默认值为"abcd"
    inputText = EditorPrefs.GetString("CustomInputWindow_InputText", "abcd");
}

private void OnDisable()
{
    // 窗口关闭时保存当前输入的内容
    EditorPrefs.SetString("CustomInputWindow_InputText", inputText);
}

这样修改后,不管是点击按钮打印,还是按回车,输入的内容都能正常保留,再也不会变回默认值啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:53:14