www.boolean.name

www.boolean.name (http://forum.boolean.name/index.php)
-   2D/GUI (http://forum.boolean.name/forumdisplay.php?f=167)
-   -   GUI. Картинка в button. Масштабирование. (http://forum.boolean.name/showthread.php?t=20520)

Evgen 07.01.2017 18:31

GUI. Картинка в button. Масштабирование.
 
А чего нельзя сделать так чтобы, картинка которая рисуется фоном в button растягивалась под размер кнопки?

Ставлю stretchHeight , stretchWidth в true , а толку нет.

Вот еще ссылки по теме:

http://answers.unity3d.com/questions...#answer-362175

http://answers.unity3d.com/questions...#answer-395319

pax 09.01.2017 12:17

Ответ: GUI. Картинка в button. Масштабирование.
 
Если это твой стиль, то выстави для картинки фона бордер в 0 и не выставляй ничего fixed. Картинку же свою указываешь во всех стейтах(normal и т.д.)?

Evgen 09.01.2017 14:27

Ответ: GUI. Картинка в button. Масштабирование.
 
Цитата:

Сообщение от pax (Сообщение 311256)
Если это твой стиль, то выстави для картинки фона бордер в 0 и не выставляй ничего fixed. Картинку же свою указываешь во всех стейтах(normal и т.д.)?

Картинка, то видна, по центру только она не растягивается, поэтому стейты тут ни причем. Либо что-то в настройках, либо растягивание не поддерживается.

pax 09.01.2017 17:28

Ответ: GUI. Картинка в button. Масштабирование.
 
Попробуй border 1 поставить и посмотреть результат

Evgen 10.01.2017 07:38

Ответ: GUI. Картинка в button. Масштабирование.
 
Pax, Пардон имеется в виду картинка которая отрисовывается дополнительно поверх основного скина, в примере текстура Mytexture, рисуется внутри кнопки.

Код:

Texture2D Mytexture;
GUI.Button(new Rect(0, 0, 200, 200), Mytexture);

А не та что прописана в качестве бэкграунда в скине. Та что в стейтах отображается нормально.

pax 10.01.2017 15:23

Ответ: GUI. Картинка в button. Масштабирование.
 
Ну эту картинку только вручную рисовать с растяжением в EventType.Repaint

Evgen 11.01.2017 13:33

Ответ: GUI. Картинка в button. Масштабирование.
 
Сделал чуть проще в начале рисую DrawTexture с тем же Rect, что и у кнопки, потом поверх уже Button.

Жека 12.01.2017 03:45

Ответ: GUI. Картинка в button. Масштабирование.
 
Evgen, можешь дать скриншот, интересно увидеть результат.

Лично я любитель формошлёпства, никогда не юзал OnGUI метод, всё в редакторе настраиваю.
Если я правильно понял суть - нужно сделать кнопку со своей кастомной картинкой. Если да, то я вставил бы чайлд-картинку в кнопку (хотя там и так по дефолту есть картинка, и у дефолтной кнопки вставлен sliced спрайт, чтобы растягивалось только то что должно, а бордеры и углы нет).

Evgen 12.01.2017 18:52

Ответ: GUI. Картинка в button. Масштабирование.
 
Готовый пример стряпать в лениво
В OnGUI кнопки делаю так:

Код:

...
GUI.DrawTexture(new Rect(x,y,w,h),MyTexture);
if(GUI.Button(new Rect(x, y, w, h),"")==true){
    ...  // если кнопку нажали
}
...

Перед этим в дефолтном скине обнуляю все текстуры один раз при старте. В связи с чем в дальнейшем отображаемые кнопки становятся прозрачными.

Код:

        GUI.skin.button.normal.background = null;
        GUI.skin.button.active.background = null;
        GUI.skin.button.hover.background = null;

Не знаю насколько это все верно и правильно. Возможно так делать не гуд.
Как-то так.

Результат: DrawTexture на который можно нажать.

RegIon 12.01.2017 19:10

Ответ: GUI. Картинка в button. Масштабирование.
 
К чему такие выпендрежи? UI не вариант?

Evgen 13.01.2017 06:33

Ответ: GUI. Картинка в button. Масштабирование.
 
Цитата:

Сообщение от RegIon (Сообщение 311334)
К чему такие выпендрежи? UI не вариант?

Я привык к старому теплому ламповому GUI. Простенько и со вкусом. Тем более UI вроде по скорости не быстрее GUI, так как очень наворочена. :cool:

pax 13.01.2017 06:49

Ответ: GUI. Картинка в button. Масштабирование.
 
Не портите дефолтный скин. Есть простой способ скопировать стиль:

PHP код:

GUIStyle _myButtonStyle;
// использовать свойство только в функции OnGUI
GUIStyle myButtonStyle
{
     
get
     
{
         if(
_myButtonStyle == null)
         {
                 
_myButtonStyle = new  GUIStyle(GUI.skin.button);
                 
_myButtonStyle.normal.background null;
                 
_myButtonStyle.active.background null;
                 
_myButtonStyle.hover.background null;   
         }

         return 
_myButtonStyle;
     }
}

void OnGUI()
{

   
GUI.DrawTexture(new Rect(x,y,w,h),MyTexture);
   if(
GUI.Button(new Rect(xywh),""myButtonStyle)==true){
       ...  
// если кнопку нажали
   
}


Либо можно вот так:
PHP код:

void OnGUI()
{

   
GUI.DrawTexture(new Rect(x,y,w,h),MyTexture);
   if(
GUI.Button(new Rect(xywh),""GUIStyle.none)==true){
       ...  
// если кнопку нажали
   
}


или так

PHP код:

void OnGUI()
{

   
GUI.DrawTexture(new Rect(x,y,w,h),MyTexture);
   if(
GUI.Button(new Rect(xywh),""GUI.skin.label)==true){
       ...  
// если кнопку нажали
   
}


Хотя в этих случаях текст будет не по центру (но у тебя его и нету же ;) ).


Цитата:

Сообщение от RegIon (Сообщение 311334)
К чему такие выпендрежи? UI не вариант?

Для быстрых тулз это самый оптимальный вариант, а для интерфейса редактора - единственный.

Evgen 13.01.2017 10:47

Ответ: GUI. Картинка в button. Масштабирование.
 
Цитата:

Сообщение от pax (Сообщение 311343)
Не портите дефолтный скин. Есть простой способ скопировать стиль.

Для быстрых тулз это самый оптимальный вариант, а для интерфейса редактора - единственный.

Способ зачетный. Надо запомнить. Но все равно буду портить дефолтный скин, потому что, у меня все кнопки таким способом отрисовываются через спец функцию. Текст тоже есть, но я его Label ом поверх рисую.

кстати с помощью GUI.skin.button=GUIStyle.none быстро можно сбросить все изменения в дефолтном скине в том числе и удалить background для кнопок. Тоже пользуюсь.

По поводу скорости тоже согласен.


Часовой пояс GMT +1, время: 03:22.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot