Страница 1 из 1

GUI Questions

СообщениеДобавлено: 02 июл 2009, 19:19
toxic
хочу спроить вот такие вопросы связанные с интерфейсом которые не нашел в справке:
1 как сделать окно перемещающимся, а не фиксированным
2 как отобразить/скрыть окно
3 как отключить управление мышкой в контроллере первого лица, чтобы было удобней управлять GUI
4 как перевести в текстовом поле во флоат(функция parseToFloat которая в обычном ява скрипт некатит)
5 2 источника освещения, кладу на них по скрипту(скрипт у каждого разный), в итоге отображается одно окно, то есть выполняется один скрипт, а как сделать чтоб выполнялись 2 и отрисовалось 2 окна?

1 GUI.DragWindow();но она не работает

Re: GUI Questions

СообщениеДобавлено: 02 июл 2009, 23:08
gnoblin
1. окно тягается
2. сделать булевскую переменную и в OnGUI() проверять рисовать окно или нет
3. находим объект GameObject go = GameObject.Find("name"), находим скрипт MouseLook ms = go.GetComponent(typeof(MouseLook)) as MouseLook; и дальше либо делаем ms.enabled = false (либо, в сам скрипт добавить булевскую переменную, которая будет отвечать за включенное или выключенное состояние логики и менять ее)
4. float.Parse()
5. а причем здесь источник освещения? нужно 2 камеры чтобы показать 2 окна.

Re: GUI Questions

СообщениеДобавлено: 03 июл 2009, 08:36
toxic
1 окно тягается когда его правильно подключеш :D
2,3,4 ясно
5 зачем 2 камеры? в примере SkinTest всё в одном скрипте на пустом ГО отображается 4 окна, может у меня какойто неправильный скрипт:

Код: Выделить всё
var color : Color;
var intens : float;
var rotate : Vector3;
var yy="0";
var xx="0";
var zz="0";

var color2 : Color;
var intens2 : float;
var pos : Vector3;
var rang : float;


function OnGUI () {
    GUI.Window (0, Rect (500, 50, 400, 400), WindowFunction1, "Point light");
    GUI.Window (0, Rect (50, 50, 400, 400), WindowFunction2, "Directional light");
}

function WindowFunction2 (windowID : int) {
   
   color = RGBSlider2 (Rect (100,120,200,10), color);
   intens = intensivSlider2(Rect (100,80,200,10), intens);
   GUI.Label(Rect(135,40,200,20),"Directional color option");
   GUI.Label(Rect(30,75,50,20),"Intensity");
   GUI.Label(Rect(30,115,50,20),"R");
   GUI.Label(Rect(30,135,50,20),"G");
   GUI.Label(Rect(30,155,50,20),"B");
   GUI.Label(Rect(130,195,200,20),"Directional rotation option");
   xx=GUI.TextField (Rect (100, 230, 30, 20), xx,3);
   yy=GUI.TextField (Rect (100, 260, 30, 20), yy,3);
   zz=GUI.TextField (Rect (100, 290, 30, 20), zz,3);
   GUI.Label(Rect(30,230,50,20),"X");
   GUI.Label(Rect(30,260,50,20),"Y");
   GUI.Label(Rect(30,290,50,20),"Z");
   
   if(GUI.Button(Rect(300,350,50,20),"Close")){
   var ms = GetComponent(typeof(MouseLook));
   //ms.enabled = false;
   }
    GUI.DragWindow (Rect (0,0, 10000, 20));
}

function WindowFunction1(WindowID : int){
    color = RGBSlider1 (Rect (100,140,200,10), color2);
   intens = intensivSlider1(Rect (100,80,200,10), intens2);
   rang = rangeSlider(Rect (100,100,200,10), rang);
   GUI.Label(Rect(135,40,200,20),"      Point color option");
   GUI.Label(Rect(30,75,50,20),"Intensity");
   GUI.Label(Rect(30,95,50,20),"Range");
   GUI.Label(Rect(30,135,50,20),"R");
   GUI.Label(Rect(30,155,50,20),"G");
   GUI.Label(Rect(30,175,50,20),"B");
   GUI.Label(Rect(130,215,200,20),"    Point position option");
   pos = posSlider(Rect (100,250,200,10),pos);
   GUI.Label(Rect(30,245,50,20),"X");
   GUI.Label(Rect(30,265,50,20),"Y");
   GUI.Label(Rect(30,285,50,20),"Z");
   
   if(GUI.Button(Rect(300,350,50,20),"Close")){}

}


function RGBSlider2 (screenRect : Rect, rgb : Color) : Color {
   rgb.r = GUI.HorizontalSlider (screenRect, rgb.r, 0.0, 1.0);
   screenRect.y += 20;
   rgb.g = GUI.HorizontalSlider (screenRect, rgb.g, 0.0, 1.0);
   screenRect.y += 20;
   rgb.b = GUI.HorizontalSlider (screenRect, rgb.b, 0.0, 1.0);
   return rgb;
}

function intensivSlider2(screenRectt : Rect, intens:float) : float{

   intens=GUI.HorizontalSlider (screenRectt, intens, 0.0, 8.0);
   return intens;

}

function RGBSlider1 (screenRect : Rect, rgb2 : Color) : Color {
   rgb2.r = GUI.HorizontalSlider (screenRect, rgb2.r, 0.0, 1.0);
   screenRect.y += 20;
   rgb2.g = GUI.HorizontalSlider (screenRect, rgb2.g, 0.0, 1.0);
   screenRect.y += 20;
   rgb2.b = GUI.HorizontalSlider (screenRect, rgb2.b, 0.0, 1.0);
   return rgb2;
}

function intensivSlider1(screenRectt : Rect, intens2:float) : float{

   intens=GUI.HorizontalSlider (screenRectt, intens, 0.0, 8.0);
   return intens2;

}

function rangeSlider(rectt : Rect, rang : float) : float{

  rang = GUI.HorizontalSlider (rectt, rang, 0.0, 30.0);
  return rang;

}

function posSlider (screenRecttt : Rect, pos:Vector3) : Vector3 {
   pos.x = GUI.HorizontalSlider (screenRecttt, pos.x, -10.0, 10.0);
   screenRecttt.y += 20;
   pos.y = GUI.HorizontalSlider (screenRecttt, pos.y, -2.0, 2.0);
   screenRecttt.y += 20;
   pos.z = GUI.HorizontalSlider (screenRecttt, pos.z, -17.0, 3.0);
   return pos;
}


function Update(){

//other


}

Re: GUI Questions

СообщениеДобавлено: 03 июл 2009, 09:57
Neodrop
Код: Выделить всё
    GUI.Window (0, Rect (500, 50, 400, 400), WindowFunction1, "Point light");
    GUI.Window (0, Rect (50, 50, 400, 400), WindowFunction2, "Directional light");


вот эти два окна никогда не будут перемешаться.
Чтобы они двигались, смотрим справку и с удивлением видим там, что параметр Rect, передаваемый функции в качестве адреса положения окна на экране, является в то же самое время, возвращаемым значением функции.
Вот те на.
То есть писать нужно примерно так :

Код: Выделить всё
var rect0 =Rect (500, 50, 400, 400);
var rect1 = Rect (50, 50, 400, 400);

function OnGUI () {
    rect0 = GUI.Window (0, rect0, WindowFunction1, "Point light");
    rect1 = GUI.Window (0, rect1, WindowFunction2, "Directional light");
}

Re: GUI Questions

СообщениеДобавлено: 03 июл 2009, 17:11
toxic
всё равно отображается одно окно, которое не перемещается

Код: Выделить всё
var rect0 =Rect (500, 50, 400, 400);
var rect1 = Rect (50, 50, 400, 400);
var rect2 = Rect (10,10,50,200);

function OnGUI () {
    rect0 = GUI.Window (0, rect0, WindowFunction1, "second");
    rect1 = GUI.Window (0, rect1, WindowFunction2, "first");
}

function WindowFunction1(windowID : int){
GUI.Label(rect2,"test");
GUI.DragWindow();
}
function WindowFunction2(windowID : int){
GUI.Label(rect2,"test");
GUI.DragWindow();
}

Re: GUI Questions

СообщениеДобавлено: 03 июл 2009, 17:19
gnoblin
Код: Выделить всё
  GUI.DragWindow (Rect (0,0,10000,10000));

Re: GUI Questions

СообщениеДобавлено: 03 июл 2009, 17:56
toxic
всё равно ничего, самое главное почему только одно окно отрисовывается, и перемещаться тоже нехочет, странно.

Re: GUI Questions

СообщениеДобавлено: 03 июл 2009, 17:59
toxic
о начало пересмещаться когда удалил строчку создания второго окна. Тогда как отрисовать 2 окна?

Re: GUI Questions

СообщениеДобавлено: 03 июл 2009, 18:06
fox
первым аргументом в вызове GUI.Window (0, rect0, WindowFunction1, "second") идет 0 - это window id, а теперь подумаейте у вас два окна с одним id, хорошо это или плохо? :-?

Re: GUI Questions

СообщениеДобавлено: 03 июл 2009, 18:49
toxic
фух наконецто получилось :ymparty:

теперь такая проблема, хочу поменять поворот камеры в зависимости от тектового поля:

Код: Выделить всё
function Update(){
...
transform.rotation.x=float.Parse(xx);
//xx-значение текстового поля
...
}


в итоге поворачивает на очень маленький градус гдето 0,004

Re: GUI Questions

СообщениеДобавлено: 03 июл 2009, 20:20
wild_r
Может стоит вращать вот этим:

Код: Выделить всё
Rotate (eulerAngles : Vector3, relativeTo : Space = Space.Self) : void

Re: GUI Questions

СообщениеДобавлено: 03 июл 2009, 21:12
toxic
а как им пользоваться в справке как то смутно рассказано :|

Re: GUI Questions

СообщениеДобавлено: 03 июл 2009, 23:32
wild_r
Все там нормально рассказано:

Rotate (xAngle : float, yAngle : float, zAngle : float, relativeTo : Space = Space.Self);

Вызов будет выглядеть так:

Код: Выделить всё
transform.Rotate (xAngle, yAngle, zAngle);


Здесь:
xAngle - угол поворота по (относительно) оси Х.
yAngle - угол поворота по (относительно) оси Y.
zAngle - угол поворота по (относительно) оси Z.

Система координат, относительно которой мы поворачиваемся по умолчанию - система координат объекта. Если нужен мир, то в конце дописываем ",Space.World".

З.Ы. Углы задаются так:

Код: Выделить всё
float angle = 75.0f //75 градусов