Кнопки нестандартной формы в Unity UI

в 12:35, , рубрики: button, canvas, image, sprite, unity, unity ui, unity3d, unity3d уроки

Недавно у меня возникла необходимость использовать в своем проекте кнопки нестандартной формы. Однако эта на первый взгляд тривиальная задача вызвала у меня некоторые затруднения.

Проблема заключается в том, что стандартная кнопка UI обрабатывает нажатия даже по прозрачным областям, что в данном случае совсем не желательно. При этом у самого компонента Button нет никаких (видимых в инспекторе) параметров, которые могли бы отвечать за то, какие области кнопки могли бы обрабатывать наведение/нажатие.

Кнопки нестандартной формы в Unity UI - 1

Спустя некоторое время поисков в интернете и курения документации ко мне пришло следующее, при этом довольно простое, решение:

(Сразу оговорюсь, что подобный пример есть в документации Unity, однако на данный момент его код уже помечается как устаревший, поэтому я решил его актуализировать и немного доработать)

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
    }
}

  1. Атрибут, который выведет в инспекторе удобный бегунок со значениями от 0 до 1.
  2. Минимальное значение альфа-канала, которое должна иметь часть текстуры, на которую наведен курсор, чтобы обрабатывать нажатия.
  3. Компонент Image кнопки (работать нужно именно с ним, а не с Button).
  4. Параметр alphaHitTestMinimumThreshold как раз и отвечает за то, какой минимальный уровень прозрачности должен быть у части текстуры, чтобы она могла обработать нажатие.

Итак, скрипт готов. Теперь перейдем к настройке текстуры кнопки. Чтобы код работал и не выдавал ошибок, необходимо включить возможность чтения/записи в Import Settings текстуры. Не забудьте принять изменения, нажав Apply.

Кнопки нестандартной формы в Unity UI - 2

Теперь вешаем скрипт на нужную кнопку, выставляем Alpha Level на нужное значение (в моем случае — 1)…

Кнопки нестандартной формы в Unity UI - 3

… запускаем и радуемся, что кнопка теперь не обрабатывает нажатия по прозрачным областям!

Кнопки нестандартной формы в Unity UI - 4

Автор: Борис Домбровский

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js