目录

一:一些常见的在Unity中隐藏字段或属性的方法

1.1 [HideInInspector] 属性:

1.2 SerializeField 和 Private字段:

1.3 在Editor中使用条件检查:

二:可用属性和标签

2.1 [HideInInspector]:

2.2 [Header("Label")]:

2.3 [Space(height)]:

2.4 [Range(min, max)]:

2.5 [TextArea]:

2.6 [SerializeField]:

2.7 [Tooltip("Description")]:

2.8 [Tooltip("Description")] 和 [Range(min, max)] 组合:

2.9 [ReadOnly]:

2.10 [RequireComponent(typeof(SomeComponent))]:

2.11  [AddComponentMenu("MenuName")]  

2.12  [DisallowMultipleComponent]

2.13 [RequireComponent]

三:一些常见的Unity属性和标签

3.1 [Multiline(lines)]:指定多行文本字段的行数。

3.2 [HideInInspector] 和 [Header("")] 组合:

3.3 [ColorUsage]:

3.4 [ImageEffectOpaque] 和 [ImageEffectTransformsToLDR]:

3.5 [SerializeField] 和 [FormerlySerializedAs("")] 组合:

3.6 [Range(min, max)] 和 [Header("")] 组合:

3.7 [Space] 和 [Header("")] 组合:

3.8 [Space(minHeight, maxWidth)]:

3.9 [SelectionBase]:

3.10 [HideInInspector] 和 [SerializeField] 组合:

3.11 [TextArea(minLines, maxLines)]:

3.12 [ContextMenuItem("Menu Item Name")]:

四:组合

 4.1 [Header("")] 和 [Tooltip("")] 组合:

4.2 [SerializeField] 和 [Tooltip("")] 组合:

4.3 [RequireComponent(typeof(SomeComponent))] 和 [Header("")] 组合:

4.4 [HideInInspector] 和 [SerializeField] 和 [FormerlySerializedAs("")] 组合:

4.5 [HideInInspector] 和 [Range(min, max)] 组合:

4.6 [SerializeField] 和 [HideInInspector] 和 [Header("")] 组合:

4.7 [ContextMenu("Context Menu Name")]:

4.8 [TextArea(minLines, maxLines)] 和 [Header("")] 组合:

4.9 [SerializeField] 和 [Space] 和 [Tooltip("")] 组合:

4.10 [HideInInspector] 和 [Space] 和 [Header("")] 组合:

4.11 [SerializeField] 和 [Header("")] 和 [Multiline(lines)] 组合:

4.12 [ReadOnly] 和 [SerializeField] 组合:

五:编辑模式

5.1 [ExecuteInEditMode]:

5.2 [ExecuteInEditMode] 和 [ContextMenu("")] 组合:

六:特殊标记

6.1 [ExecuteAlways]:


一:一些常见的在Unity中隐藏字段或属性的方法
1.1 [HideInInspector] 属性:

使用[HideInInspector]特性可以隐藏一个字段或属性,使其在Inspector中不可见。

public class MyClass : MonoBehaviour {
    public int visibleField;
    [HideInInspector]
    public int hiddenField;
}
1.2 SerializeField 和 Private字段:

将字段声明为私有(private)并添加[SerializeField]特性,即使它是私有的,也可以在Inspector中显示。但是,对于私有字段,你仍然可以使用[HideInInspector]来进一步隐藏它。

public class MyClass : MonoBehaviour {
    public int visibleField;
    [SerializeField]
    private int hiddenField;
}
1.3 在Editor中使用条件检查:

通过在自定义Editor脚本中添加条件检查,可以根据特定条件选择性地显示或隐藏字段。这通常涉及使用EditorGUILayout.PropertyField等方法。这样的脚本通常放置在Editor文件夹下。

[CustomEditor(typeof(MyClass))]
public class MyClassEditor : Editor {
    public override void OnInspectorGUI() {
        MyClass myClass = (MyClass)target;

        // 显示可见字段
        myClass.visibleField = EditorGUILayout.IntField("Visible Field", myClass.visibleField);

        // 根据某些条件隐藏字段
        if (myClass.someCondition) {
            myClass.hiddenField = EditorGUILayout.IntField("Hidden Field", myClass.hiddenField);
        }
    }
}
二:可用属性和标签
2.1 [HideInInspector]:

如前所述,用于隐藏在Inspector中的字段。

2.2 [Header("Label")]:

用于在 Inspector 面板中显示一个注释标题,并可以将相关的变量分组显示。

[Header("Settings")]
public int visibleField;
2.3 [Space(height)]:

在Inspector中添加空白区域,用于组织和美化布局。

[Space(10)]
public int spacedField;
2.4 [Range(min, max)]:

限制数值字段的范围,并在Inspector中显示为滑块。

[Range(0, 100)]
public float rangedField;
2.5 [TextArea]:

将字符串字段显示为文本区域,使得可以在Inspector中多行编辑。

[TextArea]
public string multiLineField;
2.6 [SerializeField]:

用于将私有字段或属性序列化,使其在 Inspector 面板中可编辑。默认情况下,私有字段和属性是不可序列化的,但通过添加 [SerializeField] 属性,你可以将其序列化以便在 Inspector 面板中进行编辑。

[SerializeField]
private int privateField;
2.7 [Tooltip("Description")]:

在Inspector中为字段添加悬停提示信息。

[Tooltip("This is a tooltip")]
public int tooltipField;

注意: 
[Header("xxx")]  -------直接显示在属性面板上
[Tooltip("xxx")]        ------需要鼠标选中

2.8 [Tooltip("Description")] 和 [Range(min, max)] 组合:

同时使用提示和范围。

[Tooltip("This is a tooltip")]
[Range(0, 100)]
public float tooltipAndRangeField;
2.9 [ReadOnly]:

将字段设置为只读,防止在Inspector中进行编辑。

[ReadOnly]
public int readOnlyField;
2.10 [RequireComponent(typeof(SomeComponent))]:

自动添加所需的组件到相同的GameObject上。

[RequireComponent(typeof(Rigidbody))]
public class MyComponent : MonoBehaviour {
    // ...
}
2.11  [AddComponentMenu("MenuName")]  

 [AddComponentMenu("MenuName")]属性用于自定义组件在Unity编辑器的"Add Component"菜单中的显示和分类。

例如,你可以在一个脚本类上添加[AddComponentMenu("Custom/MyComponent")]属性。这样,在Unity编辑器中的"Add Component"菜单中,你可以在"Custom"分类下找到"MyComponent"。

2.12  [DisallowMultipleComponent]

 用于标记一个脚本类,表示在同一个游戏对象上不允许添加多个相同类型的组件。

2.13 [RequireComponent]

用于标记一个脚本类,并指定该类所依赖的其他组件。当你将[RequireComponent]属性应用于一个脚本类时,Unity将自动添加所需的组件,以确保该脚本的正确运行。这样可以避免在使用该脚本时忘记添加必要组件的错误。

  例如,如果你有一个脚本类需要依赖刚体组件和碰撞器组件,你可以在该类上添加[RequireComponent(typeof(Rigidbody), typeof(Collider))]。这样,当你将该脚本添加到游戏对象上时,Unity会自动为该对象添加刚体和碰撞器组件(如果它们不存在)。

三:一些常见的Unity属性和标签
3.1 [Multiline(lines)]:指定多行文本字段的行数。
[Multiline(3)]
public string multilineField;
3.2 [HideInInspector] 和 [Header("")] 组合:

结合使用多个属性,如将字段隐藏并在其上方添加一个标签。

[HideInInspector]
[Header("Hidden Field")]
public int hiddenField;
3.3 [ColorUsage]:

用于指定颜色字段的颜色模式和范围。

[ColorUsage(true, true)]
public Color colorField;
3.4 [ImageEffectOpaque] 和 [ImageEffectTransformsToLDR]:

用于将脚本标记为图像效果,并指定其行为。

[ImageEffectOpaque]
[ImageEffectTransformsToLDR]
public class MyImageEffect : MonoBehaviour {
    // ...
}
3.5 [SerializeField] 和 [FormerlySerializedAs("")] 组合:

在重构字段名时保持序列化字段的向后兼容性。

[SerializeField]
[FormerlySerializedAs("oldFieldName")]
private int newFieldName;
3.6 [Range(min, max)] 和 [Header("")] 组合:

结合使用范围和标题标签。

[Header("Settings")]
[Range(0, 1)]
public float rangeField;
3.7 [Space] 和 [Header("")] 组合:

在字段上方创建间隔和标题。

[Space(10)]
[Header("Section Title")]
public int spacedHeaderField;
3.8 [Space(minHeight, maxWidth)]:

可以设置水平和垂直的空白区域。

[Space(10, 20)]
public int spacedField;
3.9 [SelectionBase]:

在Hierarchy面板中选择对象时,基于该脚本选择整个对象。

[SelectionBase]
public class MySelectableObject : MonoBehaviour {
    // ...
}
3.10 [HideInInspector] 和 [SerializeField] 组合:

将字段标记为序列化但在Inspector中隐藏。

[HideInInspector]
[SerializeField]
private int hiddenSerializedField;
3.11 [TextArea(minLines, maxLines)]:

指定多行文本字段的最小和最大行数。

[TextArea(2, 5)]
public string constrainedTextAreaField;
3.12 [ContextMenuItem("Menu Item Name")]:

在Inspector上为字段或方法添加上下文菜单项。

[ContextMenuItem("Reset Field", "ResetField")]
public int fieldToReset = 0;
private void ResetField() {
    fieldToReset = 0;
}
四:组合
 4.1 [Header("")] 和 [Tooltip("")] 组合:

同时使用标题和提示。

[Header("Settings")]
[Tooltip("These are the settings for the component.")]
public int headerAndTooltipField;
4.2 [SerializeField] 和 [Tooltip("")] 组合:

在私有字段上使用序列化和提示。

[SerializeField]
[Tooltip("This is a serialized field.")]
private int serializedWithTooltip;
4.3 [RequireComponent(typeof(SomeComponent))] 和 [Header("")] 组合:

自动添加所需的组件并在其上方添加标题。

[RequireComponent(typeof(Rigidbody))]
[Header("Physics Settings")]
public class MyComponent : MonoBehaviour {
    // ...
}
4.4 [HideInInspector] 和 [SerializeField] 和 [FormerlySerializedAs("")] 组合:

隐藏字段,序列化并在重构字段名时保持向后兼容性。

[HideInInspector]
[SerializeField]
[FormerlySerializedAs("oldFieldName")]
private int newFieldName;
4.5 [HideInInspector] 和 [Range(min, max)] 组合:

隐藏字段并指定其范围。

[HideInInspector]
[Range(0, 1)]
public float hiddenRangeField;
4.6 [SerializeField] 和 [HideInInspector] 和 [Header("")] 组合:

在 Inspector 中隐藏字段并添加标题。

[SerializeField]
[HideInInspector]
[Header("Hidden Field")]
private int hiddenSerializedField;
4.7 [ContextMenu("Context Menu Name")]:

用于在 Inspector 面板中为某个脚本类添加一个右键上下文菜单项,以执行特定的函数。

[ContextMenu("Reset Position")]
    private void ResetPosition()
    {
       transform.position = Vector3.zero;
    }
4.8 [TextArea(minLines, maxLines)] 和 [Header("")] 组合:

创建多行文本字段并添加标题。

[TextArea(3, 5)]
[Header("Description")]
public string descriptionText;
4.9 [SerializeField] 和 [Space] 和 [Tooltip("")] 组合:

在 Inspector 中显示序列化字段,并在其上方创建空白和提示。

[SerializeField]
[Space(5)]
[Tooltip("This is a serialized field.")]
private int serializedFieldWithSpaceAndTooltip;
4.10 [HideInInspector] 和 [Space] 和 [Header("")] 组合:

隐藏字段并在其上方创建空白和标题。

[HideInInspector]
[Space(10)]
[Header("Hidden Field")]
public int hiddenFieldWithSpaceAndHeader;
4.11 [SerializeField] 和 [Header("")] 和 [Multiline(lines)] 组合:

在 Inspector 中显示序列化字段,添加标题,并将字段显示为多行文本。

[SerializeField]
[Header("Multi-line Field")]
[Multiline(3)]
private string multiLineSerializedField;
4.12 [ReadOnly] 和 [SerializeField] 组合:

将字段标记为只读,并在 Inspector 中显示序列化字段。

[ReadOnly]
[SerializeField]
private int readOnlySerializedField;
五:编辑模式
5.1 [ExecuteInEditMode]:

用于将一个脚本类的功能在编辑器模式下执行,而不仅仅是在运行时。这对于编辑器扩展和自定义编辑器功能非常有用。

[ExecuteInEditMode]
public class MyEditorScript : MonoBehaviour {
    // ...
}
5.2 [ExecuteInEditMode] 和 [ContextMenu("")] 组合:

在编辑模式下执行脚本并添加右键上下文菜单项。

[ExecuteInEditMode]
[ContextMenu("Execute in Edit Mode")]
private void ExecuteInEditModeFunction() {
    // Do something...
}
六:特殊标记
6.1 [ExecuteAlways]:

用于在编辑器模式和运行时都执行脚本中的代码。它类似于 [ExecuteInEditMode],但它会在运行时实际执行脚本中的功能,而不仅仅是在编辑器模式下。

[ExecuteAlways]
public class MyEditorScript : MonoBehaviour {
    // ...
}