# BeginProperty

> Creates a wrapper enabling the Unity Editor to display GUI controls for the property.

## Definition

* **Type:** Method
* **Namespace:** [UnityEditor](/engine/6000.6/script-reference/unityeditor.md)
* **Assembly:** UnityEditor.CoreModule

## BeginProperty(SerializedProperty)

Creates a wrapper enabling the Unity Editor to display GUI controls for the property.

```csharp
public static void BeginProperty(SerializedProperty property)
```

### Parameters

**** (\[SerializedProperty]\(/engine/6000.6/script-reference/unityeditor/serializedproperty)): The property this GUI control modifies.

### Remarks

The [MaterialEditor](/engine/6000.6/script-reference/unityeditor/materialeditor.md) has methods that display specific Material Properties such as [MaterialEditor.ShaderProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/shaderproperty.md), or [MaterialEditor.TextureProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/textureproperty.md).

However, if you display a Property with a GUI control (such as [EditorGUI.Toggle](/engine/6000.6/script-reference/unityeditor/editorgui/toggle.md)) instead of one of these methods, you can use a property wrapper to configure the visual presentation of this Property. Using a property wrapper enables you to display MaterialVariant overrides in a bold font, provide access to the Apply/Revert options via a right-click menu, disable the GUI for locked Properties, and set the appearance when editing multiple different values.

Property wrappers begin with BeginProperty and end with [MaterialEditor.EndProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/endproperty.md). If you do not provide a rect parameter, the Editor tries to determine one by calling [GUILayoutUtility.GetLastRect](/engine/6000.6/script-reference/unityengine/guilayoututility/getlastrect.md) at the end of the scope.

If you use a custom method to display [Material.renderQueue](/engine/6000.6/script-reference/unityengine/material/renderqueue.md), [Material.doubleSidedGI](/engine/6000.6/script-reference/unityengine/material/doublesidedgi.md), [Material.enableInstancing](/engine/6000.6/script-reference/unityengine/material/enableinstancing.md) or [Material.globalIlluminationFlags](/engine/6000.6/script-reference/unityengine/material/globalilluminationflags.md), you can create a property wrapper around the field by using the corresponding [SerializedProperty](/engine/6000.6/script-reference/unityeditor/serializedproperty.md).

Additional Resources: [MaterialEditor.ShaderProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/shaderproperty.md), [SerializedProperty](/engine/6000.6/script-reference/unityeditor/serializedproperty.md), [MaterialEditor.EndProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/endproperty.md).

## BeginProperty(Rect, SerializedProperty)

Creates a wrapper enabling the Unity Editor to display GUI controls for the property.

```csharp
public static void BeginProperty(Rect rect, SerializedProperty property)
```

### Parameters

**** (\[Rect]\(/engine/6000.6/script-reference/unityengine/rect)): The box which encloses the GUI control. May include a label.**** (\[SerializedProperty]\(/engine/6000.6/script-reference/unityeditor/serializedproperty)): The property this GUI control modifies.

### Remarks

The [MaterialEditor](/engine/6000.6/script-reference/unityeditor/materialeditor.md) has methods that display specific Material Properties such as [MaterialEditor.ShaderProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/shaderproperty.md), or [MaterialEditor.TextureProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/textureproperty.md).

However, if you display a Property with a GUI control (such as [EditorGUI.Toggle](/engine/6000.6/script-reference/unityeditor/editorgui/toggle.md)) instead of one of these methods, you can use a property wrapper to configure the visual presentation of this Property. Using a property wrapper enables you to display MaterialVariant overrides in a bold font, provide access to the Apply/Revert options via a right-click menu, disable the GUI for locked Properties, and set the appearance when editing multiple different values.

Property wrappers begin with BeginProperty and end with [MaterialEditor.EndProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/endproperty.md). If you do not provide a rect parameter, the Editor tries to determine one by calling [GUILayoutUtility.GetLastRect](/engine/6000.6/script-reference/unityengine/guilayoututility/getlastrect.md) at the end of the scope.

If you use a custom method to display [Material.renderQueue](/engine/6000.6/script-reference/unityengine/material/renderqueue.md), [Material.doubleSidedGI](/engine/6000.6/script-reference/unityengine/material/doublesidedgi.md), [Material.enableInstancing](/engine/6000.6/script-reference/unityengine/material/enableinstancing.md) or [Material.globalIlluminationFlags](/engine/6000.6/script-reference/unityengine/material/globalilluminationflags.md), you can create a property wrapper around the field by using the corresponding [SerializedProperty](/engine/6000.6/script-reference/unityeditor/serializedproperty.md).

Additional Resources: [MaterialEditor.ShaderProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/shaderproperty.md), [SerializedProperty](/engine/6000.6/script-reference/unityeditor/serializedproperty.md), [MaterialEditor.EndProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/endproperty.md).

## BeginProperty(MaterialProperty)

Creates a wrapper enabling the Unity Editor to display GUI controls for the property.

```csharp
public static void BeginProperty(MaterialProperty property)
```

### Parameters

**** (\[MaterialProperty]\(/engine/6000.6/script-reference/unityeditor/materialproperty)): The property this GUI control modifies.

### Remarks

The [MaterialEditor](/engine/6000.6/script-reference/unityeditor/materialeditor.md) has methods that display specific Material Properties such as [MaterialEditor.ShaderProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/shaderproperty.md), or [MaterialEditor.TextureProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/textureproperty.md).

However, if you display a Property with a GUI control (such as [EditorGUI.Toggle](/engine/6000.6/script-reference/unityeditor/editorgui/toggle.md)) instead of one of these methods, you can use a property wrapper to configure the visual presentation of this Property. Using a property wrapper enables you to display MaterialVariant overrides in a bold font, provide access to the Apply/Revert options via a right-click menu, disable the GUI for locked Properties, and set the appearance when editing multiple different values.

Property wrappers begin with BeginProperty and end with [MaterialEditor.EndProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/endproperty.md). If you do not provide a rect parameter, the Editor tries to determine one by calling [GUILayoutUtility.GetLastRect](/engine/6000.6/script-reference/unityengine/guilayoututility/getlastrect.md) at the end of the scope.

If you use a custom method to display [Material.renderQueue](/engine/6000.6/script-reference/unityengine/material/renderqueue.md), [Material.doubleSidedGI](/engine/6000.6/script-reference/unityengine/material/doublesidedgi.md), [Material.enableInstancing](/engine/6000.6/script-reference/unityengine/material/enableinstancing.md) or [Material.globalIlluminationFlags](/engine/6000.6/script-reference/unityengine/material/globalilluminationflags.md), you can create a property wrapper around the field by using the corresponding [SerializedProperty](/engine/6000.6/script-reference/unityeditor/serializedproperty.md).

Additional Resources: [MaterialEditor.ShaderProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/shaderproperty.md), [SerializedProperty](/engine/6000.6/script-reference/unityeditor/serializedproperty.md), [MaterialEditor.EndProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/endproperty.md).

## BeginProperty(Rect, MaterialProperty)

Creates a wrapper enabling the Unity Editor to display GUI controls for the property.

```csharp
public static void BeginProperty(Rect rect, MaterialProperty property)
```

### Parameters

**** (\[Rect]\(/engine/6000.6/script-reference/unityengine/rect)): The box which encloses the GUI control. May include a label.**** (\[MaterialProperty]\(/engine/6000.6/script-reference/unityeditor/materialproperty)): The property this GUI control modifies.

### Remarks

The [MaterialEditor](/engine/6000.6/script-reference/unityeditor/materialeditor.md) has methods that display specific Material Properties such as [MaterialEditor.ShaderProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/shaderproperty.md), or [MaterialEditor.TextureProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/textureproperty.md).

However, if you display a Property with a GUI control (such as [EditorGUI.Toggle](/engine/6000.6/script-reference/unityeditor/editorgui/toggle.md)) instead of one of these methods, you can use a property wrapper to configure the visual presentation of this Property. Using a property wrapper enables you to display MaterialVariant overrides in a bold font, provide access to the Apply/Revert options via a right-click menu, disable the GUI for locked Properties, and set the appearance when editing multiple different values.

Property wrappers begin with BeginProperty and end with [MaterialEditor.EndProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/endproperty.md). If you do not provide a rect parameter, the Editor tries to determine one by calling [GUILayoutUtility.GetLastRect](/engine/6000.6/script-reference/unityengine/guilayoututility/getlastrect.md) at the end of the scope.

If you use a custom method to display [Material.renderQueue](/engine/6000.6/script-reference/unityengine/material/renderqueue.md), [Material.doubleSidedGI](/engine/6000.6/script-reference/unityengine/material/doublesidedgi.md), [Material.enableInstancing](/engine/6000.6/script-reference/unityengine/material/enableinstancing.md) or [Material.globalIlluminationFlags](/engine/6000.6/script-reference/unityengine/material/globalilluminationflags.md), you can create a property wrapper around the field by using the corresponding [SerializedProperty](/engine/6000.6/script-reference/unityeditor/serializedproperty.md).

Additional Resources: [MaterialEditor.ShaderProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/shaderproperty.md), [SerializedProperty](/engine/6000.6/script-reference/unityeditor/serializedproperty.md), [MaterialEditor.EndProperty](/engine/6000.6/script-reference/unityeditor/materialeditor/endproperty.md).
