Как реализовать кнопку произвольной формы?
Имеется Button, имеется текстура с альфа-каналом, имеющая полностью прозрачные области (якобы там ничего и нет. Как никак, графический файл являет собой прямоугольную область). Нужно, чтобы область реагирования на клик у кнопки совпадала с непрозрачной частью наложенной на кнопку текстуры. Если просто натянуть текстуру на кнопку, последняя реагирует на нажатия в любой точке картинки, даже прозрачной.
Встречал вот такое решение, датированное далеким 2012-м, но, почему-то, кажется, что должно быть что-то более оптимальное. Во-первых, в плане оптимизации, а во-вторых: данное решение, как я понимаю, имеет явный недостаток — одна кнопка своей прозрачной областью может мешать нажать на другую.
Не совсем понятно, что вы в итоге хотите получить: простую кастомную кнопку или также карту делаете, как в приведенном вами примере или еще что.
Как бы то ни было, в Unity уже есть разные вещи для работы с такими текстурами. К примеру есть у вас текстура со множеством точек перехода. Без проблем. Делаете картинку спрайтом, навешиваете на него Polygon Collider 2D и делаете скрипт, который реагирует, например, на мышь:
using UnityEngine;
public class PolygonColliderHover : MonoBehaviour {
// Use this for initialization
private SpriteRenderer spriteRenderer;
void OnMouseOver() {
spriteRenderer.color = Color.red;
}
void OnMouseExit() {
spriteRenderer.color = Color.white;
}
}
Всё. Результат:
Как видим, картинка имеет коллайдер, по форме "обтекающий" текстуру, при наведении на который что-то происходит.
Тоже самое можно делать и с картой. Навешиваем всё тот же Polygon Collider 2D у которого можно добавить множество областей, которые имеют множеством кастомных координат:
Твори что угодно. Вот пример при наведении на одну из областей карты:
Саму карту можно делать с прозрачным фоном. У спрайта есть SpriteMode Multiple
и Polygon
, позволяющие отделить те же материки на карте друг от друга.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Как получить X и Y мышки из user32dll ? Вроде бы есть функция GetCursorPos, но я не понял как её использовать
Есть проект на ардуиноСуть проекта в том, чтобы с кнопки отправлять данные на сервер
Подскажите, пожалуйста, универсальный метод, так как на сайте используется ajax валидация