#c# #unity3d #alpha #raycasting
#c# #unity3d #альфа #raycasting
Вопрос:
Я хочу создать кнопку, которая имеет пользовательскую форму в Unity.
Я создал объект пользовательского интерфейса по умолчанию> Button и установил для него Image
следующий спрайт:
На этом сайте это не показано, но круг — единственная прозрачная часть этого изображения. Это спрайт .png.
Когда я установил это в качестве спрайта для моей кнопки, я мог щелкнуть по всему прямому преобразованию этого спрайта, чтобы активировать кнопку, используя метод OnPointerDown () моей кнопки, и скрыть некоторые другие спрайты вокруг него:
public override void OnPointerDown(PointerEventData eventData)
{
base.OnPointerDown(eventData);
Debug.Log("Foo");
}
Каждый раз, когда нажимали на любую часть спрайта, прозрачную или нет, печаталось «Foo».
Теперь я устанавливаю для кнопки alphaHitTestMinimumThreshold значение 0.5:
GetComponent<Button>().image.alphaHitTestMinimumThreshold = .5f;
И, как следует из документов, я отключил атласирование…
… и включен режим чтения / записи для спрайта:
Но теперь, когда я нажимаю кнопку в своей сцене.. ничего не происходит. Независимо от того, где я нажимаю, «Foo» больше не печатается.
Затем я попытался изменить значение alphaHitTestMinimumThreshold на множество разных значений. Опять же, вся кнопка больше не была доступна для просмотра. Однако, если я вообще не коснусь alphaHitTestMinimumTreshold, мой «Foo» снова печатается.
Почему изменение значения alphaHitTestMinimumTreshold на любое значение приводит к тому, что мой метод OnPointerDown никогда не вызывается?
Ответ №1:
Итак, после 12 часов перебора всевозможных опций я обнаружил, что было более 3 последовательных проблем, вызывающих такое поведение.
Если вы когда-нибудь столкнетесь с тем, что ваши прозрачные кнопки не работают, обязательно попробуйте выполнить следующие шаги:
- Убедитесь, что в настройках импорта текстур включено чтение / запись
- Попробуйте, помогает ли установка типа сетки в режиме спрайта на полный прямоугольник (иногда хитбокс кнопки выключен)
- Отключите атласацию в разделе «Настройки проекта»> «Редактор»> «Упаковщик спрайтов»> «Режим»
- ..и, наконец, что помогло мне: если вы работаете с сборкой, которая вложена в другую сборку (скажем, у вас есть сборная для вашей кнопки, а затем другая сборная для вашего пользовательского интерфейса canvas / contents), удалите вложенную сборную из родительской сборки (иначе удалите сборную кнопку изСборный пользовательский интерфейс), и просто добавьте его обратно снова. Для меня это было чертовски просто.
Я трижды проверил, отличается ли моя вложенная сборка кнопок от схемы сборки кнопок, и это не так. Но каким-то образом удаление его из сборного пользовательского интерфейса и добавление его обратно снова решило мою проблему с большим количеством магии.
Ответ №2:
С помощью кнопок прозрачности я обнаружил, что обнаружение улучшается, когда изображение является дочерним объектом button . Итак, иерархия — это Холст> Кнопка> Изображение.
Ответ №3:
Я знаю, старая тема, но она появилась, так что вот мое решение:
Он выполнил все предложения, но это не сработало.
ОДНАКО то, что в конце концов сработало для меня, — это УКАЗАТЬ ПРАВИЛЬНЫЙ РАЗМЕР. Мой игровой объект был удлиненным, но у спрайта была отмечена галочка «сохранить соотношение сторон». Я просто не потрудился правильно определить его размер. Поэтому, когда у вас есть изображение, установите размер игрового объекта на правильные размеры.