使用Unity中的GUILayout.Button更改窗口布局C#

时间:2011-11-30 03:02:07

标签: c# user-interface unity3d

我正在尝试使用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代码的原因)。但是,单击按钮时,我添加的内容(例如标签)都不会出现。做我正在做的事情的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

不确定团结那么多。但似乎没有点击事件。 似乎是你唯一影响gui布局而没有调用和事件。 如果您需要制作标签,或者在点击按钮时更改布局,我建议。

  1. 第一,我会创建一个包含标签布局的新功能,这应该是一个gui类,但是在统一中我明白你只是将脚本附加到向导创建的对象上?
  2. 第二个我会为你的按钮创建一个事件处理程序,所以说按钮1? public button1_onClick(事件处理程序属性听到)
  3. 最后我只是在事件处理程序方法中调用标签布局方法 public button1_onclick(){    Label1layout(); }
  4. 像这样的东西。虽然不确定这是你的意思。 希望这能让您大致了解事件的过程以及如何使用它们

答案 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调用期间被绘制。