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

Unity编辑器窗口:EditorGUILayout.ObjectField无法正常处理Texture2D

问题解决:Unity EditorGUILayout.ObjectField无法修改纹理
  • 检查变量的序列化与作用域
    确保tex是可序列化的类字段,局部变量会在Editor刷新时重置,导致无法保存选择。可将其声明为公共字段或添加[SerializeField]标签:

    [SerializeField] private Texture2D tex;
    

    同时要在OnInspectorGUI()或OnGUI()生命周期方法内调用ObjectField,保证每次UI刷新都能正确读写变量。

  • 修正ObjectField的写法
    你的强制转换可能存在隐式错误,建议使用更安全的泛型或as转换写法:

    // 泛型写法(Unity 2020+支持)
    tex = EditorGUILayout.ObjectField<Texture2D>("Sand", tex, false);
    // 或as转换
    tex = EditorGUILayout.ObjectField("Sand", tex, typeof(Texture2D), false) as Texture2D;
    
  • 添加脏状态标记与刷新
    若修改后未触发数据保存或UI刷新,会出现“看起来没变化”的情况。在变量修改后添加状态标记:

    tex = EditorGUILayout.ObjectField<Texture2D>("Sand", tex, false);
    if (GUI.changed)
    {
        // Inspector脚本用此方法标记目标对象脏状态
        EditorUtility.SetDirty(target);
        // 自定义Editor窗口用此方法刷新UI
        // Repaint();
    }
    
  • 排查编辑器缓存与资源问题
    尝试以下操作修复可能的资源识别异常:

    • 右键Project窗口选择Reimport All重新导入所有资源
    • 关闭并重启Unity编辑器
    • 检查目标纹理的导入设置,确认类型为Texture2D而非Sprite等其他类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:42:42