如何将列表中的项目添加到 GenericMenu(编辑器 Window)并且您只能 select 一个

how to add items from a List to a GenericMenu (Editor Window) and you can only select one

我正在使用 UnityEdior 库在 Unity 中工作。我制作了一个自定义编辑器 window,我正在填充 void OnGui()。我创建了一个列表,它从我的 git 存储库中获取分支名称的所有字符串版本,如下所示

void OnGUI()
{
    Process checkbranch = new Process();
    if (GUILayout.Button("Show Branches"))
    {
        checkbranch.StartInfo.FileName = "git";
        checkbranch.StartInfo.Arguments = "branch";
        checkbranch.StartInfo.UseShellExecute = false;
        checkbranch.Start();
        checkbranch.WaitForExit();

        Branches.Clear();
        string branch;
        branch = checkbranch.StandardOutput.ReadLine();
        while (!string.IsNullOrEmpty(branch))
        {
           var m = new CheckBranch();
           m.BranchName = branch;
           Branches.Add(m);

           branch = checkbranch.StandardOutput.ReadLine();
         }
     }
}

public class CheckBranch
{
     public string BranchName;
     public bool BranchBool;
}

现在我正在尝试将这些分支添加到通用菜单中,这样就会有一个下拉菜单,您可以在其中选择要切换到的分支。因此,根据该声明,这意味着您只能 select 通用菜单中的一个分支。

然后我尝试将它们添加到菜单中,但在这里它开始不起作用。

private void OnGui()
{
...
if (GUILayout.Button("test"))
        {
            GenericMenu menu = new GenericMenu();
            for (int i = 0; i < Branches.Count; i++)
            { 
                menu.AddItem(new GUIContent(Branches[i].BranchName), Branches[i].BranchBool, Toggle); 
            }
            menu.ShowAsContext();
        }
}
void Toggle()
    {
        Process p = new Process();

        for (int i = 0; i < Branches.Count; i++)
        {
            Branches[i].BranchBool = true;
            p.StartInfo.FileName = "git";
            p.StartInfo.Arguments = $"checkout {Branches[i].BranchName}"; // menu function
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.UseShellExecute = false;
            p.Start();
            p.WaitForExit();
        }
    }

所以当我 select 其中一个分支时 select 我该如何解决这个问题。

这是来自 unity 的照片 before pressing

after pressing

请帮忙。

我会尝试更像组合框的东西。 EditorGUILayout.Popup 听起来和你要找的完全一样。

在 GUI 布局中试试这个:

string[] options = new string[movParamsListSize];
        for (int i = 0; i < movParamsListSize; i++)
            options[i] = i.ToString();
movStepToMoveTo.intValue = EditorGUILayout.Popup("movementStepToMoveTo",
      movStepToMoveTo.intValue, options, EditorStyles.popup);

这就像一个组合框,其中包含您在选项字符串[] 中指定的选项。 查看 movementStepToMoveTo 字段,它是一个 Serialized 属性:

希望有用。