Создание кастомной кнопки, требуется помощь в скрипте

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Создание кастомной кнопки, требуется помощь в скрипте

Сообщение JodyRedlot 18 авг 2018, 13:56

Дефолтная кнопка меня не устраивает, потому необходимо создать свою. В качестве исхода использую как Image на канвасе, так и простой спрайт (с компонентом Image). Первый мне очень бы подошёл, но тот вообще никак не реагирует на скрипт, который будет ниже (скрипт вешаю на потенциальную кнопку), даже если сделать коллайдер на объекте. Спрайт же реагирует, но при каких-либо действиях мыши вместо смены спрайта кидается в меня Null Reference Exception-ами. Я не думал, что буду ТАК долго сидеть на этом месте, но прошло часа 4, а прогресса всё нет, вынужден писать сюда. В чём проблема исключений, я искренне не понимаю: все 3 спрайта в инспекторе указываю, как бы должно работать, если смотреть на то, что я видел в интернете. В общем, вот сам скрипт. Буду благодарен за подсказку, как заставить это работать на спрайте и/или на image (и последнее было бы даже лучше)
Синтаксис:
Используется csharp
public class BtnManager : MonoBehaviour {

    public Sprite n, o, c;
    [HideInInspector]
    Image curImage;
   
    void Awake()
    {
        curImage = GetComponent<Image>();
        Debug.Log(curImage.sprite); //просто так. выводит тот спрайт, который стоит
    }

        void OnClick()
    {
        curImage.sprite = c; //здесь выскакивают ошибки null reference exception
        Debug.Log(curImage.sprite); //и здесь
    }

    void OnMouseEnter()
    {
        curImage.sprite = o; //а ещё тут
        Debug.Log(curImage.sprite); //и опять ошибка
    }

    void OnMouseExit()
    {
        curImage.sprite = n;//ну и здесь, конечно же
    }
}
JodyRedlot
UNец
 
Сообщения: 15
Зарегистрирован: 17 мар 2018, 03:51

Re: Создание кастомной кнопки, требуется помощь в скрипте

Сообщение 1max1 18 авг 2018, 14:05

1) OnMouse события работают только если есть коллайдер на объекте для UI есть https://docs.unity3d.com/ScriptReferenc ... igger.html
Можно еще через интерфейсы реализовать:
https://docs.unity3d.com/ScriptReferenc ... table.html
https://docs.unity3d.com/ScriptReferenc ... Enter.html

2) Исключения вылетают из-за того что переменным public Sprite n, o, c; не присвоено значение, тут либо через код присваивать спрайты, либо через инспектор.

p.s. [HideInInspector] бесполезен для private переменных.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Создание кастомной кнопки, требуется помощь в скрипте

Сообщение seaman 18 авг 2018, 14:14

Интересно и чем Вас не устроила "дефолтная кнопка"?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Создание кастомной кнопки, требуется помощь в скрипте

Сообщение JodyRedlot 18 авг 2018, 17:55

Не сочтите за грубость, но зачем отвечать на вопрос, который не читали?
1) "...даже если сделать коллайдер на объекте...".
Ну а за совет по поводу интерфейсов спасибо, посмотрю обязательно
2) "...все 3 спрайта в инспекторе указываю..."
Ну или вот, не знаю, может, как-то не так указываю. Хотя вроде ничего криминального: https://ibb.co/cAY28K (вставляю без тега, да, просто почему-то форуму не удаётся "определить размеры изображения". Прошу прощения за доставленные неудобства от лишнего клика мыши)
Ну и по поводу HideInInspector, хорошо, спасибо, буду иметь ввиду
JodyRedlot
UNец
 
Сообщения: 15
Зарегистрирован: 17 мар 2018, 03:51

Re: Создание кастомной кнопки, требуется помощь в скрипте

Сообщение 1max1 18 авг 2018, 18:25

1) "...даже если сделать коллайдер на объекте...".

Вешаю collider box 2d на image и у меня всё прекрасно работает с OnMouse :-?

Кстати, замену спрайтов еще можно попробовать делать так:
Синтаксис:
Используется csharp
curImage.sprite = Sprite.Create(c.texture, new Rect(0.0f, 0.0f, c.texture.width, c.texture.height), new Vector2(0.5f, 0.5f), 100.0f);
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Создание кастомной кнопки, требуется помощь в скрипте

Сообщение seaman 18 авг 2018, 21:36

Так все же - ответ есть, или просто религия не позволяет работать с дефолтной кнопкой? Или блажь такая?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Создание кастомной кнопки, требуется помощь в скрипте

Сообщение Bill Gates 20 авг 2018, 07:18

Чтобы сделать кастомную кнопку, нужно реализовать набор интерфейсов IPointerClickHandler, IPointerDownHandler, IPointerEnterHandler и т.д.
Bill Gates
UNIт
 
Сообщения: 127
Зарегистрирован: 16 июл 2015, 11:27


Вернуться в Почемучка

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

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