目录
一:一些常见的在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 {
// ...
}