继承GridLayoutGroup时Inspector无法显示私有/公有字段求助
解决Unity中继承GridLayoutGroup后自定义字段不显示在Inspector的问题
我之前也踩过这个坑!问题根源在于Unity对GridLayoutGroup这类内置UI组件的Inspector面板,是用专门的Editor类来绘制的——默认只会展示基类的所有属性,不会自动把子类的自定义字段添加上去。针对你的情况,这里有两个可行的解决方案:
方案1:编写自定义Editor脚本(推荐,最灵活)
你需要创建一个Editor脚本,继承自Unity自带的GridLayoutGroupEditor,在绘制Inspector时先调用基类的绘制逻辑,再添加上你的自定义字段。具体步骤如下:
- 在项目中新建一个
Editor文件夹(如果没有的话),然后在里面创建名为MyscriptEditor.cs的脚本 - 写入以下代码:
using UnityEditor; using UnityEditor.UI; using UnityEngine; [CustomEditor(typeof(Myscript))] public class MyscriptEditor : GridLayoutGroupEditor { public override void OnInspectorGUI() { // 先绘制GridLayoutGroup原本的所有属性 base.OnInspectorGUI(); // 添加分割线和标题,区分基类与自定义字段 EditorGUILayout.Space(); EditorGUILayout.LabelField("自定义设置", EditorStyles.boldLabel); // 绘制你的自定义字段 serializedObject.Update(); SerializedProperty ishhhProp = serializedObject.FindProperty("ishhh"); EditorGUILayout.PropertyField(ishhhProp); serializedObject.ApplyModifiedProperties(); } }
- 回到Unity编辑器,选中挂载了
Myscript的对象,就能在GridLayoutGroup属性下方看到你的ishhh字段了。
方案2:用[Serializable]封装字段(快速临时方案)
如果不想写Editor脚本,可以把自定义字段封装到一个可序列化的类中,Unity的默认Inspector会自动识别并显示这个类的字段:
修改你的Myscript代码:
using UnityEngine.UI; using UnityEngine; public class Myscript : GridLayoutGroup { [System.Serializable] public class CustomSettings { public bool ishhh; // 后续新增的自定义字段也可以放在这里 } public CustomSettings customSettings; }
这样在Inspector里会出现一个Custom Settings的折叠项,展开就能看到ishhh字段了。
补充说明
你已经给字段加了[SerializeField],但因为基类的Editor没有处理子类字段才导致不显示,上面两种方法都能解决这个问题。方案1的优势是可以完全自定义Inspector布局,和基类属性完美整合;方案2更快捷,适合简单的字段需求。
内容的提问来源于stack exchange,提问作者himanshu patel




