Изменить расположение окон с помощью GUILayout.Button в Unity & C # - PullRequest
0 голосов
/ 30 ноября 2011

Я пытаюсь создать меню в Unity, используя кнопки GUILayout (и Begin / End Vertical / Horizontal и т. Д.), И я хочу, чтобы при нажатии кнопки некоторая информация отображалась под ней. Я пытаюсь сделать это с помощью этого кода:

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 голосов
/ 25 апреля 2012

В едином интерфейсе код для нажатия кнопки заключен в оператор 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 в вашем исходном коде.

0 голосов
/ 16 октября 2015

Поскольку функция OnGUI вызывается каждый кадр, как Update. Это означает, что ваш ярлык будет нарисован только во время вызова OnGUI, который происходит при нажатии кнопки.

0 голосов
/ 16 февраля 2012

не уверен в единстве так много. но, похоже, нет события для щелчка. Кажется, ты единственный, кто производит макет графического интерфейса без вызовов и событий. Если вам нужно сделать ярлыки видимыми или изменить их расположение при нажатии кнопки, я бы предложил.

  1. Во-первых, я создал бы новую функцию, которая содержала бы расположение ваших меток, это должно быть в классе графического интерфейса, но в единстве я понимаю, что вы просто присоединяете сценарии к созданным мастером объектам?
  2. 2-ой, я бы тогда создал обработчик событий для вашей кнопки, так сказать кнопку 1? public button1_onClick (свойства обработчика событий идут услышать)
  3. в прошлом я бы просто вызвал метод размещения меток внутри метода обработчика событий public button1_onclick () { Label1layout (); }

Как то так. Хотя не уверен, что это то, что вы имеете в виду. Надеюсь, что это дает вам общее представление о процессе событий и о том, как их использовать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...