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等其他类型
- 右键Project窗口选择
内容的提问来源于stack exchange,提问作者Darren
相关产品推荐
相关产品推荐

