GUI Questions

Общие вопросы о Unity3D

GUI Questions

Сообщение toxic 02 июл 2009, 19:19

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

1 GUI.DragWindow();но она не работает
toxic
UNец
 
Сообщения: 35
Зарегистрирован: 28 май 2009, 18:30

Re: GUI Questions

Сообщение gnoblin 02 июл 2009, 23:08

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 окна.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: GUI Questions

Сообщение toxic 03 июл 2009, 08:36

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


}
toxic
UNец
 
Сообщения: 35
Зарегистрирован: 28 май 2009, 18:30

Re: GUI Questions

Сообщение Neodrop 03 июл 2009, 09:57

Код: Выделить всё
    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");
}
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: GUI Questions

Сообщение toxic 03 июл 2009, 17:11

всё равно отображается одно окно, которое не перемещается

Код: Выделить всё
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();
}
toxic
UNец
 
Сообщения: 35
Зарегистрирован: 28 май 2009, 18:30

Re: GUI Questions

Сообщение gnoblin 03 июл 2009, 17:19

Код: Выделить всё
  GUI.DragWindow (Rect (0,0,10000,10000));
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: GUI Questions

Сообщение toxic 03 июл 2009, 17:56

всё равно ничего, самое главное почему только одно окно отрисовывается, и перемещаться тоже нехочет, странно.
toxic
UNец
 
Сообщения: 35
Зарегистрирован: 28 май 2009, 18:30

Re: GUI Questions

Сообщение toxic 03 июл 2009, 17:59

о начало пересмещаться когда удалил строчку создания второго окна. Тогда как отрисовать 2 окна?
toxic
UNец
 
Сообщения: 35
Зарегистрирован: 28 май 2009, 18:30

Re: GUI Questions

Сообщение fox 03 июл 2009, 18:06

первым аргументом в вызове GUI.Window (0, rect0, WindowFunction1, "second") идет 0 - это window id, а теперь подумаейте у вас два окна с одним id, хорошо это или плохо? :-?
Добавить foxumkov в Skype
Мои проекты:
Turbodrive
Изображение

Изображение
Аватара пользователя
fox
UNITрон
 
Сообщения: 255
Зарегистрирован: 07 ноя 2008, 13:02
Откуда: Питер
  • ICQ

Re: GUI Questions

Сообщение toxic 03 июл 2009, 18:49

фух наконецто получилось :ymparty:

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

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


в итоге поворачивает на очень маленький градус гдето 0,004
toxic
UNец
 
Сообщения: 35
Зарегистрирован: 28 май 2009, 18:30

Re: GUI Questions

Сообщение wild_r 03 июл 2009, 20:20

Может стоит вращать вот этим:

Код: Выделить всё
Rotate (eulerAngles : Vector3, relativeTo : Space = Space.Self) : void
wild_r
UNITрон
 
Сообщения: 220
Зарегистрирован: 16 апр 2009, 20:46
Откуда: Россия, Санкт - Петербург
  • ICQ

Re: GUI Questions

Сообщение toxic 03 июл 2009, 21:12

а как им пользоваться в справке как то смутно рассказано :|
toxic
UNец
 
Сообщения: 35
Зарегистрирован: 28 май 2009, 18:30

Re: GUI Questions

Сообщение wild_r 03 июл 2009, 23:32

Все там нормально рассказано:

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 градусов
wild_r
UNITрон
 
Сообщения: 220
Зарегистрирован: 16 апр 2009, 20:46
Откуда: Россия, Санкт - Петербург
  • ICQ


Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 11