- PVSM.RU - https://www.pvsm.ru -
Недавно у меня возникла необходимость использовать в своем проекте кнопки нестандартной формы. Однако эта на первый взгляд тривиальная задача вызвала у меня некоторые затруднения.
Проблема заключается в том, что стандартная кнопка UI обрабатывает нажатия даже по прозрачным областям, что в данном случае совсем не желательно. При этом у самого компонента Button нет никаких (видимых в инспекторе) параметров, которые могли бы отвечать за то, какие области кнопки могли бы обрабатывать наведение/нажатие.
Спустя некоторое время поисков в интернете и курения документации ко мне пришло следующее, при этом довольно простое, решение:
(Сразу оговорюсь, что подобный пример есть в документации Unity [1], однако на данный момент его код уже помечается как устаревший, поэтому я решил его актуализировать и немного доработать)
using UnityEngine;
using UnityEngine.UI;
public class ButtonClickMask : MonoBehaviour
{
[Range(0f, 1f)] //1
public float AlphaLevel = 1f; //2
private Image bt; //3
void Start()
{
bt = gameObject.GetComponent<Image>();
bt.alphaHitTestMinimumThreshold = AlphaLevel; //4
}
}
Итак, скрипт готов. Теперь перейдем к настройке текстуры кнопки. Чтобы код работал и не выдавал ошибок, необходимо включить возможность чтения/записи в Import Settings текстуры. Не забудьте принять изменения, нажав Apply.
Теперь вешаем скрипт на нужную кнопку, выставляем Alpha Level на нужное значение (в моем случае — 1)…
… запускаем и радуемся, что кнопка теперь не обрабатывает нажатия по прозрачным областям!
Автор: Борис Домбровский
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sprite/338923
Ссылки в тексте:
[1] документации Unity: https://www.pvsm.ruhttp://http:https://docs.unity3d.com/ru/current/ScriptReference/UI.Image-eventAlphaThreshold.html//
[2] Источник: https://habr.com/ru/post/478734/?utm_source=habrahabr&utm_medium=rss&utm_campaign=478734
Нажмите здесь для печати.