UI

Графический интерфейс пользователя

UI

Сообщение djon801 14 янв 2015, 09:35

всем здрасти!
Перепиливаю стандартный скрипт подключения к фатону из демки под UI

вопрос такой!
конкретно вот тут
Синтаксис:
Используется csharp
 this.scrollPos = GUILayout.BeginScrollView(this.scrollPos);
            foreach (RoomInfo roomInfo in PhotonNetwork.GetRoomList())
            {
             
               
                GUILayout.Label(roomInfo.name + " " + roomInfo.playerCount + "/" + roomInfo.maxPlayers);

               
                if (GUILayout.Button("коннект", GUILayout.Width(150)))
                {
                    PhotonNetwork.JoinRoom(roomInfo.name);
                }
               
            }

при появлении новой комноты в гуи создавался список доступных комнат и с кнопкой подключения
Как такой лист генирировать в цикле только UI
пробовал в цикле Instantiate но там трансформ не такой ,
вобщем как осущиствить UI так как в этом куске кода
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: UI

Сообщение waruiyume 14 янв 2015, 09:58

Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: UI

Сообщение djon801 14 янв 2015, 10:02

waruiyume писал(а):http://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/creating-scroll-lists-at-run-time

Спасибоооооо
Блин,я всю ночь ковыряю инет в поисках инфы,и не разу не попал на этот тотур жесть,утро вечера мудренее Огромное спасибо
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: UI

Сообщение djon801 15 янв 2015, 10:54

Так,ну с Instantiate и с контентом все понятно
а как быть тут
Синтаксис:
Используется csharp
foreach (RoomInfo roomInfo in PhotonNetwork.GetRoomList())
            {
               GUILayout.Label(roomInfo.name + " " + roomInfo.playerCount + "/" + roomInfo.maxPlayers);

               
                if (GUILayout.Button("коннект", GUILayout.Width(150)))
                {
                    PhotonNetwork.JoinRoom(roomInfo.name);
                }              
            }

GUILayout.Label появляется всего одна надпись и одна кнопка
Еслиже я вставляю в этот цикл Instantiate ,то при создании комнаты контент начинает наполняться безконечно ,предполагалось что появится одна запись как это и при Gui
что то не доходит до меня вчем разница,цикл как я понимаю отрабатывает один раз при появлении новой записи в
RoomInfo roomInfo in PhotonNetwork.GetRoomList()
так почему инстант безконечно начинает работать?
Почему Gui не рисует безконечно GUILayout.Label(roomInfo.name + " " + roomInfo.playerCount + "/" + roomInfo.maxPlayers);?
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: UI

Сообщение djon801 15 янв 2015, 20:10

Не кто не подскажет что делать?
как я понимаю foreach передает весь список из RoomInfo
Объясните почему gui показывает только одну созданную строчку
а любые действия в этом цикле отрабатываются бесконечно в этом цикле
допустим я имею в списке Комната96 игрок такойто и количество игроков такоето
GUI выводит одну строчку с этой инфой.тоесть показывает все что есть в RoomInfo

Я понимаю что сам цикл находится в Update и поэтому выполняется всевремя ,
но почему не создаются GUILayout.Label тоже бесконечно? как это работает вообще ?
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: UI

Сообщение djon801 17 янв 2015, 21:34

вобщем сам сделал!
вот что получилось
Синтаксис:
Используется csharp
 public void romlist()// это вызывается с другого скрипта раз в 10 секунд создает нужное количество все как надо
    {      
        foreach (RoomInfo roomInfo in PhotonNetwork.GetRoomList())
        {
           

            for (int i = 0; i < 1; i++)
            {
                GameObject newButton = Instantiate(sampleButton) as GameObject;
                newButton.transform.SetParent(contentPanel);
                newButton.GetComponentInChildren<Text>().text = roomInfo.name + " " + roomInfo.playerCount + "/" + roomInfo.maxPlayers;
                newButton.GetComponent<sozdanie_comnati>().name = roomInfo.name;
            }
        }
    }


Синтаксис:
Используется csharp
 private bool readynow = true;
    public int t = 3;

   
    private void Update()
    {
        if (readynow)
            StartCoroutine(MakeBox());
     
    }

    private IEnumerator MakeBox()
    {
        readynow = false;
        menu.romlist(); // просмотр листа каждые 10 сек

        yield return new WaitForSeconds(t);
        t = 10;
        readynow = true;
    }

этот скрипт на кнопке которая Instantiate(sampleButton)
Синтаксис:
Используется csharp
 void Start()
    {
       
       {
           Destroy(gameObject,10); //после создания удалиться через 10 сек
       }
       if (gameObject.GetComponentInChildren<Text>().text.IndexOf("2/2") != -1) //тут сразу если текст совпадает
       {
           Destroy(gameObject);
       }
       
    }
    void Update()
   {
        if(klik !=null) // ну и обработчик клика
        {
            klik.onClick.AddListener(SomethingToDo);
        }
       
   }
   public void SomethingToDo()
   {
       PhotonNetwork.JoinRoom(name);
   }


Я понимаю что начюдил ерунды какой то,но оно работает
Если есть у кого какие то мысли как это все можно сделать иначе и правильние с удовольствием выслушаю;
Раздражает конкретно то что каждые 10 сек контект мигает удаляет старые и делат новые кнопки
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08


Вернуться в uGUI

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2