Вот накидал модулёк ComboBox..
он далёк от совершенства и есть пару костылей но в общем наверно можно использовать если вдруг пригодится кому ...
если кто сможет придать изящности и универсальности коду и запостит .. буду рад.
- Код: Выделить всё
using UnityEngine;
using System;
using System.Collections;
public class ComboBoxUIControl
{
public String[] menuItems;
public String mySelectedItem;
public int mySelectedIndex = 0;
public GUIStyle customButton;
public GUIStyle customSelectionGrid;
private Vector2 scrollPosition;
private bool showMenu = false;
public string Paint(Rect wRect, float parentX, float parentY, int winID)
{
Rect winRect = new Rect (wRect.x+parentX, wRect.y + wRect.height + parentY, 150, 60);
if(GUI.Button(wRect, mySelectedItem)) //, customButton))
{
showMenu = !showMenu;
}
if(showMenu)
{
winRect = GUI.Window(winID, winRect, EmptyWindowHandler, "", new GUIStyle());
GUI.BringWindowToFront (winID);
}
return mySelectedItem;
}
void EmptyWindowHandler(int windowID)
{
GUI.Box(new Rect ( 0, 0, 150, 60 ), "");
GUILayout.BeginArea(new Rect ( 0, 0, 150, 60 ));
scrollPosition = GUILayout.BeginScrollView(scrollPosition);
mySelectedIndex = GUILayout.SelectionGrid(mySelectedIndex, menuItems, 1);//, customSelectionGrid);
if (mySelectedItem != menuItems[mySelectedIndex])
{
mySelectedItem = menuItems[mySelectedIndex];
showMenu = false;
}
GUILayout.EndScrollView();
GUILayout.EndArea();
}
}
вот таким макаром вызывать
- Код: Выделить всё
гдето в инициализации
...
...
сomboBox = new ComboBoxUIControl();
сomboBox.menuItems = new string[3];
сomboBox.menuItems[0] = "item1";
сomboBox.menuItems[1] = "item2";
сomboBox.menuItems[2] = "item3";
сomboBox.mySelectedItem = сomboBox.menuItems[0];
...
гдето в отрисовке
...
comboValue = comboBox.Paint(new Rect(120, 128, 104, 21), windowRect.x, windowRect.y, 20);
...
например если кто знает ..
можно ли автоматом получить свободное ID окна и не указывать каждый раз руками ?
можно ли узнать абсолютные координаты элемента автоматом ... не складывая координаты всех его родителей...