【问题标题】:How hide script field from new MonoBehaviour如何从新的 MonoBehaviour 隐藏脚本字段
【发布时间】:2019-06-28 06:18:36
【问题描述】:

我想对新脚本隐藏脚本字段。 (每个脚本默认显示脚本)

一种方法是为我们的脚本写CustomEditor

但我想要更快的方式来做到这一点。无需为我的新脚本编写编辑器脚本。

【问题讨论】:

  • 老实说,我不知道你想说什么。如果您添加图片以显示您隐藏的内容,则此帖子可能会有点更有意义。
  • 嗯?你现在想做什么?你的问题令人困惑。还有,private怎么解决不了?

标签: c# unity3d unity-editor


【解决方案1】:

我建议创建新属性以获得更多控制。

using System;

[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
public sealed class HideScriptField : Attribute { }

并且作为具有此新属性的所有脚本的编辑器脚本

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(MonoBehaviour), true)]
public class DefaultMonoBehaviourEditor : Editor
{
    private bool hideScriptField;

    private void OnEnable()
    {
        hideScriptField = target.GetType().GetCustomAttributes(typeof(HideScriptField), false).Length > 0;
    }

    public override void OnInspectorGUI()
    {
        if (hideScriptField)
        {
            serializedObject.Update();
            EditorGUI.BeginChangeCheck();
            DrawPropertiesExcluding(serializedObject, "m_Script");
            if (EditorGUI.EndChangeCheck())
                serializedObject.ApplyModifiedProperties();
        }
        else
        {
            base.OnInspectorGUI();
        }
    }
}

现在在每个新的MonoBehaviour 脚本中,如果您想隐藏脚本字段,您可以简单地在其上添加此属性 (HideScriptField)。并完成。

【讨论】:

  • 您是不是在提出问题的那一刻就回答了自己的问题?
  • 并非闻所未闻,但我对为什么在这种情况下这样做感到困惑。它甚至没有真正为网站添加任何内容。
  • @Vulpex 您可以同时提出和回答您自己的问题,只要它不重复并且对其他人有用。虽然看起来人们讨厌它。
  • 如果您在回答中解释您所做的而不是仅仅发布代码会很好。
【解决方案2】:

根据我从你措辞非常糟糕的问题中了解到的情况,我设法得出结论,你需要attributes

[SerializeField]
private CustomClass x;

是在检查器中显示的私有字段。

[HideInInspector]
public CustomClass x;

是在检查器中不可见的公共字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2011-07-25
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多