You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

继承GridLayoutGroup时Inspector无法显示私有/公有字段求助

解决Unity中继承GridLayoutGroup后自定义字段不显示在Inspector的问题

我之前也踩过这个坑!问题根源在于Unity对GridLayoutGroup这类内置UI组件的Inspector面板,是用专门的Editor类来绘制的——默认只会展示基类的所有属性,不会自动把子类的自定义字段添加上去。针对你的情况,这里有两个可行的解决方案:

方案1:编写自定义Editor脚本(推荐,最灵活)

你需要创建一个Editor脚本,继承自Unity自带的GridLayoutGroupEditor,在绘制Inspector时先调用基类的绘制逻辑,再添加上你的自定义字段。具体步骤如下:

  1. 在项目中新建一个Editor文件夹(如果没有的话),然后在里面创建名为MyscriptEditor.cs的脚本
  2. 写入以下代码:
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();
    }
}
  1. 回到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

火山引擎 最新活动