改变窗口布局与GUILayout.按钮在Unity &c#
本文关键字:Unity 按钮 GUILayout 窗口 布局 改变 | 更新日期: 2023-09-27 18:16:23
我试图在Unity中使用GUILayout按钮(和开始/结束垂直/水平等)制作菜单,我想让它,当我点击一个按钮,某些信息显示在它下面。我试着用下面的代码来做:
foreach (Agent Agent in agents)//(Agent Agent in 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代码的原因)。但是,我添加的东西(比如标签)都不会在单击按钮时出现。做我想做的事情的正确方法是什么?
不太确定统一。但似乎没有一个事件为点击。似乎是你唯一的影响GUI布局没有调用和事件。如果你需要使标签出现或改变布局时,一个按钮被点击,我建议。
- 首先我会创建一个包含标签布局的新函数,这应该在gui类中,但在unity中,我理解您只需将脚本附加到向导创建的对象? 第二,我会为你的按钮创建一个事件处理程序,所以说按钮1?public button1_onClick(事件处理程序属性go hear)
- 最后,我将简单地调用事件处理程序方法中的标签布局方法公共button1_onclick () {Label1layout ();}
就像这样。虽然我不确定你是这个意思。
在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
在你的原始代码
因为OnGUI
函数像Update
一样每帧调用一次。这意味着你的标签只在点击按钮时发生的OnGUI
调用期间被绘制。