2015-02-02 2 views
0

У меня проблема с печатью элементов GUI для цикла pf OnGUI(). В коде перечисленных ниже я создать GUI.Label пользователя нажал на GUI.Box:GUI.Label не работает в цикле

public List<string> messages = new List<string>();  
int dialogueMsg = 0; 
    void OnGUI() 
     { 
      Event currentEvent = Event.current; 
      if (enabled) 
      { 
       GUI.BeginGroup(new Rect(Screen.width/8, Screen.height/4 + Screen.height/2, Screen.width - Screen.width/4, Screen.height/4)); 
       GUI.Box(new Rect(0, 0, Screen.width - Screen.width/4, Screen.height/4), ""); 
       if (currentEvent.button == 0 && currentEvent.type == EventType.mouseDown) 
       { 
        for (int i = 0; i < messages.Count; i ++) 
        { 
         if (dialogueMsg < messages.Count) 
         { 
          print(dialogueMsg); 
          print(messages[dialogueMsg]); 
          GUI.Label(new Rect(25, 25, Screen.width - Screen.width/4, Screen.height/4), messages[dialogueMsg]); 
          ++dialogueMsg; 
          break; 
         } 
         else 
         { 
          enabled = !enabled; 
          break; 
         } 
        } 
       } 
       GUI.EndGroup(); 
      } 
     } 

И когда пользователь нажал - ничего не случилось, за исключением печати правильные значения dialogueMsg и сообщения [dialogueMsg]. Что я делаю не так? Кто-нибудь знаком с этой проблемой?

+0

Когда ваш оператор if, внутри цикла for, вы хотите, чтобы он вышел из цикла for при первом запуске? в операторе if и else у вас есть ключевое слово break, которое выведет вас из цикла for независимо от того, превышено ли счет (i CalebB

+0

О, я понимаю. Мне нужно было просто установить новую переменную String, которая хранит сообщения [dialogMsg] значение и стоит GUI.Label вне for-loop. Thx для ответа! – Supo

+0

@CalebB Может захотеть опубликовать его в качестве ответа, чтобы OP мог его принять –

ответ

0

В обоих заявлениях if и else у вас есть перерыв ключевое слово, таким образом, цикл for будет работать только один раз, затем выйти из цикла, независимо от того, если i < messages.Count() или нет. Просто вытащите ключевое слово break из if или else, или оба кода, где вы хотите, чтобы цикл продолжался, тогда вы должны быть настроены для этой части.

+0

Я уже делаю это, и ничего не меняется. И есть очень странная проблема: я отделяю метод OnGUI, создаю новый MyMethod(), который содержит GUI.Label в нем ... и он работает! Я отправляю свой код, когда буду дома – Supo

+0

Какое ваше желаемое действие от этого метода? Я вижу, что он должен создавать и заполнять ярлыки GUI вашими сообщениями, но есть ли что-то еще, что, возможно, произойдет в дополнение к этому? Можете ли вы добавить дополнительный код? – CalebB

Смежные вопросы