如何将列表中的项目添加到 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 属性:
希望有用。
我正在使用 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 属性:
希望有用。