Сменить стили одной кнопки(Решено)

Программирование на Юнити.

Сменить стили одной кнопки(Решено)

Сообщение ][@FF 21 апр 2011, 13:19

Доброго дня.
Не уверен что данной темы или подобной не встречалось ранее, если есть прошу кинуть ссылку.
И так задача. Мне необходимо сменить вид кнопки по ее нажатию. До пустим у меня есть кнопка звук со своим собственным стилем (три состояния: нормал, ховер, актив), и есть другой стиль зачеркнутый звук (так же три состояния)
Эта кнопка находится в созданном окне.
Как отобразить окно и кнопку в ней я разобрался но как сменить стиль так и не понял. Ниже привожу код того что есть на данный момент

Синтаксис:
Используется csharp
public class GameMenuTop : MonoBehaviour
{
    public GUIStyle MyStyleRightMenuFunc; // стиль окна
    public GUIStyle MyStyleGMenuBtnSound; // стиль кнопки звука
    public GUIStyle MyStyleGMenuBtnSoundX; // стиль перечеркнутой кнопки звука


    Rect MyStyleGMenuBtnSoundRect; //параметры кнопки звука(перечеркнутого звука - они одинаковые) - размер и положение

    float MenuSizeX;// размеры нарисованного окна
    float MenuSizeY;

    void RightMenuFunc(int windowID)
    {
        MenuSizeX = 331;
        MenuSizeY = 50;

        if (GUI.Button(new Rect((MenuSizeX - 45 - 15 - 59 - 59), (MenuSizeY - 49) / 2, 59, 49), "", MyStyleGMenuBtnSound))
        //if (GUI.Button(MyStyleGMenuBtnSoundRect, "", MyStyleGMenuBtnSound)) // можно использовать эту строчку заместо верхней
        {
               //делаем что то
        }
    }
    void Start()
    {
    }
    void Update()
    {
    }

    void OnGUI()
    {
        MyStyleGMenuBtnSoundRect = new Rect((MenuSizeX - 45 - 35 - 59 - 59), (MenuSizeY - 49) / 2, 59, 49); // параметры кнопки
        GUI.Window(2, new Rect((Screen.width - 20 - MenuSizeX), 10, MenuSizeX, MenuSizeY), RightMenuFunc, "", MyStyleRightMenuFunc); // рисуем окно с нашим стилем в нем будет кнопка
    }
}
Последний раз редактировалось ][@FF 21 апр 2011, 17:31, всего редактировалось 1 раз.
Аватара пользователя
][@FF
UNIт
 
Сообщения: 62
Зарегистрирован: 24 фев 2011, 20:02
  • ICQ

Re: Сменить стили одной кнопки

Сообщение eric 21 апр 2011, 14:55

Может заменить кнопку на toggle будет более подходящим? И все изображения задать Normal, Hover, OnNormal и т.п.
eric
UNец
 
Сообщения: 38
Зарегистрирован: 12 июн 2010, 12:35

Re: Сменить стили одной кнопки

Сообщение Zaicheg 21 апр 2011, 16:14

][@FF писал(а):И так задача. Мне необходимо сменить вид кнопки по ее нажатию.

Синтаксис:
Используется csharp
GUIStyle style_01;
GUIStyle style_02
GUIStyle style_work;

void Start() { style_work = style_01; }

void OnGUI() {
if (GUI.Button(new Rect(0, 0, 100, 30), "Button", style_work))
style_work = style_02; }
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Сменить стили одной кнопки

Сообщение ][@FF 21 апр 2011, 16:40

Дьяченко Роман
Ваш способ хорош и я его знаю, но есть один маленький нюанс на который вы наверно не обратили внимание, кнопка находится внутри созданного окна.

в нем такой способ уже не действует = (

Синтаксис:
Используется csharp
public class GameMenuTop : MonoBehaviour
{
    public GUIStyle style_01;
    public GUIStyle style_02;
    public GUIStyle style_work;

    float MenuSizeX;
    float MenuSizeY;
   
    bool style_workbool;

    void RightMenuFunc(int windowID)
    {
        MenuSizeX = 331;
        MenuSizeY = 50;

        if (GUI.Button(new Rect(0, 0, 45, 45), "", style_work))
        {
            style_workbool = !style_workbool;
            if (style_workbool)
            {
                style_work = style_02;
            }
            else
            {
                style_work = style_01;
            }
        }

    }

    void Start()
    {
        style_work = style_01;
        style_workbool = false;
    }
    void Update()
    {

    }

    void OnGUI()
    {
        MyStyleGMenuBtnSoundRect = new Rect((MenuSizeX - 45 - 35 - 59 - 59), (MenuSizeY - 49) / 2, 59, 49);
        GUI.Window(2, new Rect((Screen.width - 20 - MenuSizeX), 10, MenuSizeX, MenuSizeY), RightMenuFunc, "", MyStyleRightMenuFunc);
    }
}


нужно что то на подобии такого, здесь с вашим способом но не работает потому что в находится в созданном окне
Аватара пользователя
][@FF
UNIт
 
Сообщения: 62
Зарегистрирован: 24 фев 2011, 20:02
  • ICQ

Re: Сменить стили одной кнопки

Сообщение Zaicheg 21 апр 2011, 17:01

Код ваш я не читал. Стили работают везде, в том числе и в окнах, и именно так, как я написал.
Я проверил.

Рабочий код:
Синтаксис:
Используется csharp
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;

public class NewBehaviourScript : MonoBehaviour
{
        public GUIStyle style_01;
        public GUIStyle style_02;
        GUIStyle style;

        void Start()
        {
                style = style_01;
        }

        void OnGUI()
        {
                GUI.Window(0, new Rect(10f, 10f, 300f, 200f), WindowA, "");
        }

        void WindowA(int windowID)
        {
                if (GUI.Button(new Rect(10f, 40f, 200f, 100f), "Button", style))
                {
                        style = style_02;
                }
        }
}
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Сменить стили одной кнопки

Сообщение ][@FF 21 апр 2011, 17:30

ох, все спасибо, я где-то с кодом перемудрил потому и не менялось. еще раз большой спасибо.
Аватара пользователя
][@FF
UNIт
 
Сообщения: 62
Зарегистрирован: 24 фев 2011, 20:02
  • ICQ


Вернуться в Скрипты

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


cron