如何在Unity Inspector中隐藏子类继承的父类公有变量?
解决方法:在子类Inspector中隐藏父类的Public变量
这问题我之前做项目时也碰到过,刚好有个完美的解决方案——既不用把Lives改成private,又能让它在类B的Inspector里彻底消失,同时保证其他脚本(比如GameManager)还能正常访问它。
核心思路:自定义Inspector编辑器
Unity允许我们通过自定义Editor脚本,精确控制某个类在Inspector面板中显示哪些属性。具体步骤如下:
创建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(); } }原理说明
[CustomEditor(typeof(B))]:指定这个Editor脚本专门负责类B的Inspector绘制DrawPropertiesExcluding:这个方法会自动绘制目标类的所有序列化属性,但跳过你指定的名称(这里就是"Lives")- 整个过程不会改变
Lives的public访问权限,GameManager之类的脚本依然可以通过A或B的实例正常读取/修改这个变量
额外提示
- 如果后续你想让其他继承自A的子类显示
Lives,完全不受影响,这个自定义Editor只会作用于类B - 一定要把Editor脚本放在
Editor文件夹下,否则打包项目时会出现编译错误
内容的提问来源于stack exchange,提问作者user11746000
相关产品推荐
相关产品推荐

