C# 如何将列表中的项目添加到GenericMenu(编辑器窗口),并且只能选择一个
我使用UnityDior图书馆在Unity工作。我制作了一个自定义编辑器窗口,我正在填充OnGui中的空白。我创建了一个列表,其中包含git存储库中所有分支名称的字符串版本,如下所示C# 如何将列表中的项目添加到GenericMenu(编辑器窗口),并且只能选择一个,c#,unity3d,unity-editor,C#,Unity3d,Unity Editor,我使用UnityDior图书馆在Unity工作。我制作了一个自定义编辑器窗口,我正在填充OnGui中的空白。我创建了一个列表,其中包含git存储库中所有分支名称的字符串版本,如下所示 void OnGUI() { Process checkbranch = new Process(); if (GUILayout.Button("Show Branches")) { checkbranch.StartInfo.FileName = "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;
}
现在我正在尝试将这些分支添加到通用菜单中,这样会有一个下拉菜单,您可以在其中选择要切换到的分支。因此,基于该语句,这意味着您只能从通用菜单中选择一个分支
然后我尝试将它们添加到菜单中,但在这里它开始不起作用
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();
}
}
因此,当我选择一个分支时,它会选择所有分支,我如何处理这些分支
这是unity的照片
请帮忙。我想试试更像组合框的东西。听起来和你要找的一模一样 在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);
这就像一个组合框,其中包含在选项字符串[]中指定的选项。
请参阅MovementStepToMoveToField,它是一个序列化属性:
希望这是有用的。然后您可以通过将其包装在EditorGUI.BeginChangeCheck;中来增强它。。。。ifEditorGUI.EndChangeCheck{检查新索引并在此处执行操作}编辑器样式有点多余。默认情况下,弹出窗口已经是一个弹出窗口;我也会把它作为一个列表,以便添加和删除项目,然后做选择。ToArray@derHugo如何从列表中创建它?@crimson如前所述,像往常一样使用列表添加和删除项目,然后使用options.ToArray;以便仅在需要它作为数组时将其转换为数组