我正在尝试使用GUILayout按钮(以及开始/结束垂直/水平等)在Unity中创建菜单,我想要它,以便当我单击按钮时,某些信息显示在它下面。我正在尝试使用此代码:
foreach(代理中的代理程序代理)//(EntityManager.FindAll()中的代理程序代理程序) {
//GUILayout.BeginHorizontal();
if (GUILayout.Button(agent.shortName))
{
Debug.Log("clicked" + agent.shortName);
GUILayout.BeginHorizontal();
GUILayout.BeginVertical();
GUILayout.Label("Health: "+agent.Health +"/"+agent.MaximumHealth);
GUILayout.EndVertical();
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.BeginVertical();
GUILayout.Label("Thoughts: nothing");
GUILayout.EndVertical();
GUILayout.EndHorizontal();
/*if (agent.hasFlag)
{ //TODO: Add this function to agent
GUILayout.BeginVertical();
GUILayout.Label("Has the flag");
GUILayout.EndVertical();
}*/
}
//GUILayout.EndHorizontal();
}
GUILayout.EndHorizontal();
GUILayout.EndVertical();
// Make the windows be draggable.
GUI.DragWindow();
这成功创建了3个按钮(因为我在foreach循环中使用的代理列表中有3个代理)并且按钮工作(这就是添加Debug.Log代码的原因)。但是,单击按钮时,我添加的内容(例如标签)都不会出现。做我正在做的事情的正确方法是什么?
答案 0 :(得分:0)
不确定团结那么多。但似乎没有点击事件。 似乎是你唯一影响gui布局而没有调用和事件。 如果您需要制作标签,或者在点击按钮时更改布局,我建议。
像这样的东西。虽然不确定这是你的意思。 希望这能让您大致了解事件的过程以及如何使用它们
答案 1 :(得分:0)
在Unity gui中,按钮单击的代码包含在按钮的if
语句中。
if(GUILayout.Button("Button Text"))
{
// code for click event goes here
}
此代码仅针对按下按钮的帧进行调用,因此,在上面的示例中,您只显示单击1帧的代理的详细信息。
您需要将其更改为
if (GUILayout.Button(agent.shortName))
{
agent.selected = true;
}
if(agent.selected)
{
Debug.Log("clicked" + agent.shortName);
GUILayout.BeginHorizontal();
GUILayout.BeginVertical();
GUILayout.Label("Health: "+agent.Health +"/"+agent.MaximumHealth);
GUILayout.EndVertical();
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.BeginVertical();
GUILayout.Label("Thoughts: nothing");
GUILayout.EndVertical();
GUILayout.EndHorizontal();
/*if (agent.hasFlag)
{ //TODO: Add this function to agent
GUILayout.BeginVertical();
GUILayout.Label("Has the flag");
GUILayout.EndVertical();
}*/
}
如果您只想在按住按钮时显示信息,则可以将原始代码中的GUILayout.Button
更改为GUILayout.RepeatButton
。
答案 2 :(得分:0)
因为每个帧都会调用OnGUI
函数,例如Update
。这意味着您的标签仅在点击按钮时发生的OnGUI
调用期间被绘制。