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

如何在Unity Inspector中隐藏子类继承的父类公有变量?

解决方法:在子类Inspector中隐藏父类的Public变量

这问题我之前做项目时也碰到过,刚好有个完美的解决方案——既不用把Lives改成private,又能让它在类B的Inspector里彻底消失,同时保证其他脚本(比如GameManager)还能正常访问它。

核心思路:自定义Inspector编辑器

Unity允许我们通过自定义Editor脚本,精确控制某个类在Inspector面板中显示哪些属性。具体步骤如下:

  1. 创建Editor脚本
    在你的项目中新建一个Editor文件夹(如果没有的话),然后在里面创建一个名为BEditor.cs的脚本,代码如下:

    using UnityEditor;
    using UnityEngine;
    
    [CustomEditor(typeof(B))]
    public class BEditor : Editor
    {
        public override void OnInspectorGUI()
        {
            // 序列化目标对象,方便操作属性
            serializedObject.Update();
            
            // 绘制类B的所有属性,但排除继承自A的"Lives"变量
            // "m_Script"是Unity自带的脚本引用属性,一般也需要保留显示
            DrawPropertiesExcluding(serializedObject, "m_Script", "Lives");
            
            // 应用所有属性修改
            serializedObject.ApplyModifiedProperties();
        }
    }
    
  2. 原理说明

    • [CustomEditor(typeof(B))]:指定这个Editor脚本专门负责类B的Inspector绘制
    • DrawPropertiesExcluding:这个方法会自动绘制目标类的所有序列化属性,但跳过你指定的名称(这里就是"Lives")
    • 整个过程不会改变Lives的public访问权限,GameManager之类的脚本依然可以通过A或B的实例正常读取/修改这个变量

额外提示

  • 如果后续你想让其他继承自A的子类显示Lives,完全不受影响,这个自定义Editor只会作用于类B
  • 一定要把Editor脚本放在Editor文件夹下,否则打包项目时会出现编译错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:27:51