| 
				
				[РЕШЕНО] Создать 100 кнопок GUI автоматически
				 | 
 | 
| robertono | Дата: Среда, 21 Августа 2013, 20:49 | Сообщение # 1 |  
 
Чокнутый Кот 
Сейчас нет на сайте 
 
 | Делаю что то типо инвентаря, но это не инвентарь) Вообщем мне нужно создать 100 кнопок. Но блин вручную создавать 100 строк + ещё действие при нажатии - это ужас. Есть варианты что бы сгенерировать их при запуске скрипта ?
 
 Сообщение отредактировал robertono - Среда, 21 Августа 2013, 21:12  |  
| 
 | 
 |    | 
| shubniggurath | Дата: Среда, 21 Августа 2013, 20:53 | Сообщение # 2 |  
 
www.playnoread.com 
Сейчас нет на сайте 
 
 | Наверное вы слышали про циклы.
  Учу 3д!
 |  
| 
 | 
 |    | 
| robertono | Дата: Среда, 21 Августа 2013, 20:55 | Сообщение # 3 |  
 
Чокнутый Кот 
Сейчас нет на сайте 
 
 | shubniggurath, я то слышал. Только я не попробовал... Ведь OnGUI это что то типо Update, тоже постоянно обновляется код. Если я сделаю цикл for где создам 100 кнопок, они поидее создадутся и пропадут. А повторять этот цикл постоянно - мне кажется снизит фпс жёстко.
 |  
| 
 | 
 |    | 
| romgerman | Дата: Среда, 21 Августа 2013, 21:00 | Сообщение # 4 |  
 
старожил 
Сейчас нет на сайте 
 
 | Я не пробовал, но думаю так:   Код    function OnGUI() {   for(i=0; i <= 100; i++){   GUI.Button(Rect(10 + (i*50+10),10,50,50), "Кнопка");   }   }        Ну и там поправь как тебе надо, если вообще заработает  
 |  
| 
 | 
 |    | 
| shubniggurath | Дата: Среда, 21 Августа 2013, 21:02 | Сообщение # 5 |  
 
www.playnoread.com 
Сейчас нет на сайте 
 
 | Цитата (robertono)  А повторять этот цикл постоянно - мне кажется снизит фпс жёстко.      Вы это сами придумали? А то что каждый фрейм ВСЕ перерисовывается вас не смущает? Как написал уже romgerman, элементы ГУИ перерисовываются в хэндлере OnGUI.
  Учу 3д!
 |  
| 
 | 
 |    | 
| romgerman | Дата: Среда, 21 Августа 2013, 21:03 | Сообщение # 6 |  
 
старожил 
Сейчас нет на сайте 
 
 | shubniggurath, согласен. Когда цикл FOR закончит работу, всё вернётся на свои места и фпс и прочее.
 |  
| 
 | 
 |    | 
| robertono | Дата: Среда, 21 Августа 2013, 21:04 | Сообщение # 7 |  
 
Чокнутый Кот 
Сейчас нет на сайте 
 
 | shubniggurath, а как использовать на примере romgerman нажатие на кнопку?
 |  
| 
 | 
 |    | 
| romgerman | Дата: Среда, 21 Августа 2013, 21:05 | Сообщение # 8 |  
 
старожил 
Сейчас нет на сайте 
 
 | robertono, а вот это хороший вопрос.
 |  
| 
 | 
 |    | 
| robertono | Дата: Среда, 21 Августа 2013, 21:09 | Сообщение # 9 |  
 
Чокнутый Кот 
Сейчас нет на сайте 
 
 | romgerman, дайте пожалуйста на него ответ  Добавлено (21.08.2013, 21:08) --------------------------------------------- romgerman, а понял, очень просто    Код    for(int i=0; i <= 100; i++){        if(GUI.Button(new Rect(10 + (i*50+10),10,50,50), "Кнопка")){        Debug.Log("Button presed. i == " + i);       }      }    Добавлено (21.08.2013, 21:09) --------------------------------------------- Тогда всё, вопросов нет, плюсики я поставил, так что все рады   
 |  
| 
 | 
 |    | 
| romgerman | Дата: Среда, 21 Августа 2013, 21:10 | Сообщение # 10 |  
 
старожил 
Сейчас нет на сайте 
 
 | robertono, да.. я просто думал, что так не будет работать и сейчас решил попробовать   И ещё не успел.Добавлено (21.08.2013, 21:10) --------------------------------------------- Всё работает)) 
 |  
| 
 | 
 |    | 
| robertono | Дата: Среда, 21 Августа 2013, 21:11 | Сообщение # 11 |  
 
Чокнутый Кот 
Сейчас нет на сайте 
 
 | Цитата (romgerman) Всё работает))     а почему бы ему и не работать  
 |  
| 
 | 
 |    | 
| andarky | Дата: Четверг, 22 Августа 2013, 12:05 | Сообщение # 12 |  
 
старожил 
Сейчас нет на сайте 
 
 | а я делаю иначе.   Возможно будете ругать, но...   итак, вот суть:   Создаю визуально GUItexture.   Настраиваю как нужно.   Пишу ей нужный скрипт с несколькими ф-циями.   Потом сохраняю ка PREFAB и удаляю. 
   Потом делаю скрпит который её вызывает .   и так:   Код    var Gui0=Instantiate(<prefab>, pos, rot);   for(int i=0; i <= 100; i++){      var newGui=Instantiate(Gui0, pos, rot);   newGui.name='Gui'+i.toString();   newGui.SendMessge(<namefunc>,i); //ном.идентификатор         }        }      ну вот как-то так. 
   Код писал от балды, возможны синт.ошибки.   Выполняю его в разделе onStart: 
   Код    var <prefab>:GameObject; // а сюда надо из инспектора проекта перетащить тот самый Prefab-заготовку   function Start()   {   //тот код   }  
 
   Моя страничка по дизайну   GameDev//Design//3D   Ютубчик  
 
 Сообщение отредактировал andarky - Четверг, 22 Августа 2013, 12:06  |  
| 
 | 
 |    |