# ExitGUI()

> Puts the GUI in a state that will prevent all subsequent immediate mode GUI functions from evaluating for the remainder of the GUI loop by throwing an ExitGUIException.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine](/engine/6000.6/script-reference/unityengine.md)
* **Assembly:** UnityEngine.IMGUIModule

```csharp
public static void ExitGUI()
```

### Remarks

In Unity's immediate mode GUI system, the GUI loop procedes by calling [GUI](/engine/6000.6/script-reference/unityengine/gui.md) methods during a sequence of [Event](/engine/6000.6/script-reference/unityengine/event.md)s and these methods take action according to the [Event.type](/engine/6000.6/script-reference/unityengine/event/type.md). For example, when using [GUILayout](/engine/6000.6/script-reference/unityengine/guilayout.md), controls will first receive a [EventType.Layout](/engine/6000.6/script-reference/unityengine/eventtype/layout.md) event to determine how much space they need, and then later receive a [EventType.Repaint](/engine/6000.6/script-reference/unityengine/eventtype/repaint.md) event to actually draw into the space allocated for them.

In this sequence, it is expected that control IDs are requested and used in the same order for each [Event](/engine/6000.6/script-reference/unityengine/event.md) that is processed during the GUI loop, and that the event loop does not re-enter itself. Use [GUIUtility.ExitGUI](/engine/6000.6/script-reference/unityengine/guiutility/exitgui.md) in situations that might violate these assumptions, such as when a change in some value might change what controls are displayed next. Using this method can prevent errors such as `ArgumentException: Getting control 0's position in a group with only 0 controls when doing Repaint`.

Additional Resources: [GUIUtility.GetControlID](/engine/6000.6/script-reference/unityengine/guiutility/getcontrolid.md).
