【问题标题】:How to set initial values for custom inspector fields in unity如何统一设置自定义检查器字段的初始值
【发布时间】:2017-03-27 16:41:02
【问题描述】:

我有两个类似的课程ClassA 和ClassB。两个类都包含一个布尔值:

A 类:

[SerializeField]
private bool _overwrite = true;

public bool overwrite
{
    get { return _overwrite; }
    set { _overwrite = value; }
}

B 类:

[SerializeField]
private bool _hide = true;

public bool hide
{
    get { return _hide; }
    set { _hide = value; }
}

两个脚本都有一个CustomEditor 脚本。在这两个编辑器脚本中,在 OnInspectorGUI() 方法中,以下两行用于将相应的布尔值添加到 Inspector。

ClassA.overwrite = EditorGUILayout.ToggleLeft("Overwrite", ClassA.overwrite);

ClassB.hide = EditorGUILayout.ToggleLeft("Hide", ClassB.hide);


当我将 ClassA 添加到游戏对象时,“覆盖”字段未选中,但是当我将 ClassB 添加到游戏对象时,“隐藏”字段被选中。

我不明白在设置属性的默认/初始值时有什么不同,或者涉及哪些其他因素。

理想情况下,我希望它们都被默认选中。

有什么我可能缺少的想法吗?

感谢您的宝贵时间,

利亚姆

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    MonoBehaviours 的Reset 方法似乎可以提供您正在寻找的功能。它看起来像这样:

    void Reset() 
    {
        _overwrite = true;
    }
    

    【讨论】:

      【解决方案2】:

      grabObject 是什么?

      如果它是您在使用Editor 脚本的target 变量的OnEnable 方法中找到引用的组件变量,那么只需将您的编辑器脚本更改为:

      grabObject.overwrite = EditorGUILayout.ToggleLeft("Overwrite", grabObject.overwrite);
      

      和:

      grabObject.hide = EditorGUILayout.ToggleLeft("Hide", grabObject.hide);
      

      应该可以解决你的问题。

      【讨论】:

      • 抱歉!我在复制和粘贴时错过了这一点。实际的类称为grabObject。您上面所拥有的几乎正是我在项目中所拥有的。
      猜你喜欢
      • 2020-10-20
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 2018-12-17
      相关资源
      最近更新 更多