# Popup

> Makes a generic popup selection field.

## Definition

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

## Popup(Rect, int, string\[], GUIStyle)

Makes a generic popup selection field.

```csharp
public static int Popup(Rect position, int selectedIndex, string[] displayedOptions, GUIStyle style)
```

### Parameters

**** (\[Rect]\(/engine/6000.6/script-reference/unityengine/rect)): Rectangle on the screen to use for the field.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The index of the option the field shows.**** (\[string\[]]\(https\://learn.microsoft.com/dotnet/api/system.string)): An array with the options shown in the popup.**** (\[GUIStyle]\(/engine/6000.6/script-reference/unityengine/guistyle)): Optional [GUIStyle](/engine/6000.6/script-reference/unityengine/guistyle.md).

### Returns

| Type                                                       | Description                                                 |
| ---------------------------------------------------------- | ----------------------------------------------------------- |
| [int](https://learn.microsoft.com/dotnet/api/system.int32) | The index of the option that has been selected by the user. |

### Remarks

Takes the currently selected index as a parameter and returns the index selected by the user.

![EditorGUIPopup (Popup)](/api/media?file=/engine/6000.6/media/images/EditorGUIPopup.png)

*Popup in and Editor Window.*

```csharp
using UnityEngine;
using UnityEditor;


// Adds a component to the selected GameObjects

class EditorGUIPopup : EditorWindow
{
    string[] options = { "Rigidbody", "Box Collider", "Sphere Collider" };
    int index = 0;

    [MenuItem("Examples/Editor GUI Popup usage")]
    static void Init()
    {
        var window = GetWindow<EditorGUIPopup>();
        window.position = new Rect(0, 0, 180, 80);
        window.Show();
    }

    void OnGUI()
    {
        index = EditorGUI.Popup(
            new Rect(0, 0, position.width, 20),
            "Component:",
            index,
            options);

        if (GUI.Button(new Rect(0, 25, position.width, position.height - 26), "Add Component"))
            AddComponentToObjects();
    }

    void AddComponentToObjects()
    {
        if (!Selection.activeGameObject)
        {
            Debug.LogError("Please select at least one GameObject first");
            return;
        }

        foreach (GameObject obj in Selection.gameObjects)
        {
            switch (index)
            {
                case 0:
                    obj.AddComponent<Rigidbody>();
                    break;

                case 1:
                    obj.AddComponent<BoxCollider>();
                    break;

                case 2:
                    obj.AddComponent<SphereCollider>();
                    break;
            }
        }
    }
}
```

**Note:** The `displayedOptions` lists an array of options.  When these elements contain "/" (slash characters) the elements are use for sub-menus.  The text to the left of the slashes determines the structure.

## Popup(Rect, int, GUIContent\[], GUIStyle)

Makes a generic popup selection field.

```csharp
public static int Popup(Rect position, int selectedIndex, GUIContent[] displayedOptions, GUIStyle style)
```

### Parameters

**** (\[Rect]\(/engine/6000.6/script-reference/unityengine/rect)): Rectangle on the screen to use for the field.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The index of the option the field shows.**** (\[GUIContent\[]]\(/engine/6000.6/script-reference/unityengine/guicontent)): An array with the options shown in the popup.**** (\[GUIStyle]\(/engine/6000.6/script-reference/unityengine/guistyle)): Optional [GUIStyle](/engine/6000.6/script-reference/unityengine/guistyle.md).

### Returns

| Type                                                       | Description                                                 |
| ---------------------------------------------------------- | ----------------------------------------------------------- |
| [int](https://learn.microsoft.com/dotnet/api/system.int32) | The index of the option that has been selected by the user. |

### Remarks

Takes the currently selected index as a parameter and returns the index selected by the user.

![EditorGUIPopup (Popup)](/api/media?file=/engine/6000.6/media/images/EditorGUIPopup.png)

*Popup in and Editor Window.*

```csharp
using UnityEngine;
using UnityEditor;


// Adds a component to the selected GameObjects

class EditorGUIPopup : EditorWindow
{
    string[] options = { "Rigidbody", "Box Collider", "Sphere Collider" };
    int index = 0;

    [MenuItem("Examples/Editor GUI Popup usage")]
    static void Init()
    {
        var window = GetWindow<EditorGUIPopup>();
        window.position = new Rect(0, 0, 180, 80);
        window.Show();
    }

    void OnGUI()
    {
        index = EditorGUI.Popup(
            new Rect(0, 0, position.width, 20),
            "Component:",
            index,
            options);

        if (GUI.Button(new Rect(0, 25, position.width, position.height - 26), "Add Component"))
            AddComponentToObjects();
    }

    void AddComponentToObjects()
    {
        if (!Selection.activeGameObject)
        {
            Debug.LogError("Please select at least one GameObject first");
            return;
        }

        foreach (GameObject obj in Selection.gameObjects)
        {
            switch (index)
            {
                case 0:
                    obj.AddComponent<Rigidbody>();
                    break;

                case 1:
                    obj.AddComponent<BoxCollider>();
                    break;

                case 2:
                    obj.AddComponent<SphereCollider>();
                    break;
            }
        }
    }
}
```

**Note:** The `displayedOptions` lists an array of options.  When these elements contain "/" (slash characters) the elements are use for sub-menus.  The text to the left of the slashes determines the structure.

## Popup(Rect, string, int, string\[], GUIStyle)

Makes a generic popup selection field.

```csharp
public static int Popup(Rect position, string label, int selectedIndex, string[] displayedOptions, GUIStyle style)
```

### Parameters

**** (\[Rect]\(/engine/6000.6/script-reference/unityengine/rect)): Rectangle on the screen to use for the field.**** (\[string]\(https\://learn.microsoft.com/dotnet/api/system.string)): Optional label in front of the field.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The index of the option the field shows.**** (\[string\[]]\(https\://learn.microsoft.com/dotnet/api/system.string)): An array with the options shown in the popup.**** (\[GUIStyle]\(/engine/6000.6/script-reference/unityengine/guistyle)): Optional [GUIStyle](/engine/6000.6/script-reference/unityengine/guistyle.md).

### Returns

| Type                                                       | Description                                                 |
| ---------------------------------------------------------- | ----------------------------------------------------------- |
| [int](https://learn.microsoft.com/dotnet/api/system.int32) | The index of the option that has been selected by the user. |

### Remarks

Takes the currently selected index as a parameter and returns the index selected by the user.

![EditorGUIPopup (Popup)](/api/media?file=/engine/6000.6/media/images/EditorGUIPopup.png)

*Popup in and Editor Window.*

```csharp
using UnityEngine;
using UnityEditor;


// Adds a component to the selected GameObjects

class EditorGUIPopup : EditorWindow
{
    string[] options = { "Rigidbody", "Box Collider", "Sphere Collider" };
    int index = 0;

    [MenuItem("Examples/Editor GUI Popup usage")]
    static void Init()
    {
        var window = GetWindow<EditorGUIPopup>();
        window.position = new Rect(0, 0, 180, 80);
        window.Show();
    }

    void OnGUI()
    {
        index = EditorGUI.Popup(
            new Rect(0, 0, position.width, 20),
            "Component:",
            index,
            options);

        if (GUI.Button(new Rect(0, 25, position.width, position.height - 26), "Add Component"))
            AddComponentToObjects();
    }

    void AddComponentToObjects()
    {
        if (!Selection.activeGameObject)
        {
            Debug.LogError("Please select at least one GameObject first");
            return;
        }

        foreach (GameObject obj in Selection.gameObjects)
        {
            switch (index)
            {
                case 0:
                    obj.AddComponent<Rigidbody>();
                    break;

                case 1:
                    obj.AddComponent<BoxCollider>();
                    break;

                case 2:
                    obj.AddComponent<SphereCollider>();
                    break;
            }
        }
    }
}
```

**Note:** The `displayedOptions` lists an array of options.  When these elements contain "/" (slash characters) the elements are use for sub-menus.  The text to the left of the slashes determines the structure.

## Popup(Rect, GUIContent, int, GUIContent\[], GUIStyle)

Makes a generic popup selection field.

```csharp
public static int Popup(Rect position, GUIContent label, int selectedIndex, GUIContent[] displayedOptions, GUIStyle style)
```

### Parameters

**** (\[Rect]\(/engine/6000.6/script-reference/unityengine/rect)): Rectangle on the screen to use for the field.**** (\[GUIContent]\(/engine/6000.6/script-reference/unityengine/guicontent)): Optional label in front of the field.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The index of the option the field shows.**** (\[GUIContent\[]]\(/engine/6000.6/script-reference/unityengine/guicontent)): An array with the options shown in the popup.**** (\[GUIStyle]\(/engine/6000.6/script-reference/unityengine/guistyle)): Optional [GUIStyle](/engine/6000.6/script-reference/unityengine/guistyle.md).

### Returns

| Type                                                       | Description                                                 |
| ---------------------------------------------------------- | ----------------------------------------------------------- |
| [int](https://learn.microsoft.com/dotnet/api/system.int32) | The index of the option that has been selected by the user. |

### Remarks

Takes the currently selected index as a parameter and returns the index selected by the user.

![EditorGUIPopup (Popup)](/api/media?file=/engine/6000.6/media/images/EditorGUIPopup.png)

*Popup in and Editor Window.*

```csharp
using UnityEngine;
using UnityEditor;


// Adds a component to the selected GameObjects

class EditorGUIPopup : EditorWindow
{
    string[] options = { "Rigidbody", "Box Collider", "Sphere Collider" };
    int index = 0;

    [MenuItem("Examples/Editor GUI Popup usage")]
    static void Init()
    {
        var window = GetWindow<EditorGUIPopup>();
        window.position = new Rect(0, 0, 180, 80);
        window.Show();
    }

    void OnGUI()
    {
        index = EditorGUI.Popup(
            new Rect(0, 0, position.width, 20),
            "Component:",
            index,
            options);

        if (GUI.Button(new Rect(0, 25, position.width, position.height - 26), "Add Component"))
            AddComponentToObjects();
    }

    void AddComponentToObjects()
    {
        if (!Selection.activeGameObject)
        {
            Debug.LogError("Please select at least one GameObject first");
            return;
        }

        foreach (GameObject obj in Selection.gameObjects)
        {
            switch (index)
            {
                case 0:
                    obj.AddComponent<Rigidbody>();
                    break;

                case 1:
                    obj.AddComponent<BoxCollider>();
                    break;

                case 2:
                    obj.AddComponent<SphereCollider>();
                    break;
            }
        }
    }
}
```

**Note:** The `displayedOptions` lists an array of options.  When these elements contain "/" (slash characters) the elements are use for sub-menus.  The text to the left of the slashes determines the structure.
