# GUI.GroupScope

> Disposable helper class for managing GUI.BeginGroup / GUI.EndGroup.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine](/engine/6000.0/script-reference/unityengine.md)
* **Assembly:** UnityEngine.IMGUIModule
* **Inherits from:** Scope
* **Implements:** [IDisposable](https://learn.microsoft.com/dotnet/api/system.idisposable)

```csharp
public class GUI.GroupScope : GUI.Scope, IDisposable
```

## Remarks

[GUI.BeginGroup](/engine/6000.0/script-reference/unityengine/gui/begingroup.md) is called at construction, and [GUI.EndGroup](/engine/6000.0/script-reference/unityengine/gui/endgroup.md) is called when the instance is disposed. When you begin a group, the coordinate system for GUI controls are set so (0,0) is the top-left corner of the group. All controls are clipped to the group. Groups can be nested - if they are, children are clipped to their parents.

This is very useful when moving a bunch of GUI elements around on screen. A common use case is designing your menus to fit on a specific screen size, then centering the GUI on larger displays.

## Examples

```csharp
using UnityEngine;

public class Example : MonoBehaviour
{
    void OnGUI()
    {
        // Constrain all drawing to be within a 800x600 pixel area centered on the screen.
        using (var groupScope = new GUI.GroupScope(new Rect(Screen.width / 2 - 400, Screen.height / 2 - 300, 800, 600)))
        {
            // Draw a box in the new coordinate space defined by the BeginGroup.
            // Notice how (0,0) has now been moved on-screen.
            GUI.Box(new Rect(0, 0, 800, 600), "This box is now centered! - here you would put your main menu");
        }
        // The group is now ended.
    }
}
```

## Constructors

| Constructor                                                                                                                                                                     | Description                                                |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| [GroupScope(UnityEngine.Rect)](/engine/6000.0/script-reference/unityengine/gui/groupscope/ctor.md#groupscope\(rect\))                                                           | Create a new GroupScope and begin the corresponding group. |
| [GroupScope(UnityEngine.Rect,System.String)](/engine/6000.0/script-reference/unityengine/gui/groupscope/ctor.md#groupscope\(rect-string\))                                      | Create a new GroupScope and begin the corresponding group. |
| [GroupScope(UnityEngine.Rect,System.String,UnityEngine.GUIStyle)](/engine/6000.0/script-reference/unityengine/gui/groupscope/ctor.md#groupscope\(rect-string-guistyle\))        | Create a new GroupScope and begin the corresponding group. |
| [GroupScope(UnityEngine.Rect,UnityEngine.GUIContent)](/engine/6000.0/script-reference/unityengine/gui/groupscope/ctor.md#groupscope\(rect-guicontent\))                         | Create a new GroupScope and begin the corresponding group. |
| [GroupScope(UnityEngine.Rect,UnityEngine.GUIStyle)](/engine/6000.0/script-reference/unityengine/gui/groupscope/ctor.md#groupscope\(rect-guistyle\))                             | Create a new GroupScope and begin the corresponding group. |
| [GroupScope(UnityEngine.Rect,UnityEngine.Texture)](/engine/6000.0/script-reference/unityengine/gui/groupscope/ctor.md#groupscope\(rect-texture\))                               | Create a new GroupScope and begin the corresponding group. |
| [GroupScope(UnityEngine.Rect,UnityEngine.Texture,UnityEngine.GUIStyle)](/engine/6000.0/script-reference/unityengine/gui/groupscope/ctor.md#groupscope\(rect-texture-guistyle\)) | Create a new GroupScope and begin the corresponding group. |
