Это одна из тех странных вещей в Unity...
100% реальных проектов нуждаются в этом, но Unity забыли это сделать.
Укороченная версия:
Вам нужен Touchable.cs в каждом проекте Unity:
// file Touchable.cs
// Correctly backfills the missing Touchable concept in Unity.UI's OO chain.
using UnityEngine;
using UnityEngine.UI;
#if UNITY_EDITOR
using UnityEditor;
[CustomEditor(typeof(Touchable))]
public class Touchable_Editor : Editor
{ public override void OnInspectorGUI(){} }
#endif
public class Touchable:Text
{ protected override void Awake() { base.Awake();} }
Используйте обычную функцию редактора «Создать кнопку» в Unity.
Как вы знаете, функция редактора автоматически добавляет два компонента. Один Text
, другой Image
...
Просто удалите их обоих
Поместите приведенный выше скрипт Touchable.cs
на кнопку.
Вы сделали. Вот и все.
Он не может «распадаться» с обновлениями Unity.
На самом деле вы можете "застегнуть" что угодно в .UI
, поместив Touchable
поверх него.
Никогда больше не «добавляйте прозрачное изображение», чтобы сделать кнопку.
Unity забыла абстрагировать «осязаемое» понятие в объектно-ориентированной цепочке.
Итак, мы, разработчики, должны сделать свой собственный класс Touchable «из» классов Unity.
Это классическая проблема «обратной засыпки» в объектно-ориентированном подходе.
При «обратной засыпке» единственная проблема заключается в следующем: она должна полностью автоматически поддерживаться. Есть только одно хорошее решение — Touchable.cs, которым все пользуются.
Итак, во всех реальных проектах Unity кнопка выглядит так:
ONE У вас есть Button.cs
от Unity
ДВА нужно добавить Touchable.cs
Некоторые команды создают функцию редактора «Создать лучшую кнопку», которая просто создает игровой объект с помощью Button.cs + Touchable.cs.
Важный совет...
Допустим, у вас может быть очень сложный пользовательский интерфейс panel. Таким образом, он изменяет размеры или даже имеет анимацию.
На самом деле, вы можете просто поместить «Button+Touchable» на что-нибудь подобное, и это сработает.
Просто установите Button+Touchable, чтобы расширить родительский элемент. Вот и все.
В этом примере изображения «возобновить» и «выйти» могут быть любыми. (Анимация, сложная панель из множества частей, текст, спрайты, что-то невидимое, стопка — что угодно.)
Во всех случаях просто поместите Button+Touchable ниже, и у вас будет безупречная кнопка.
На самом деле: этот подход настолько прост, что вы, вероятно, будете использовать его даже для простых случаев.
Скажем, ваша кнопка — тривиальное изображение. Гораздо проще просто иметь изображение, а затем поместить на него Button+Touchable. (Вместо использования запутанной и проблематичной функции «Кнопка» в редакторе.)
Понимание ситуации...
1) Класс Unity Button.cs
просто фантастический.
2) Но функция редактора "создать кнопку" - это фигня...
3) Делает кнопку "вверх ногами",
4) т. е. помещает текст/изображение под Button.cs
5) «Кнопочность» — это то, что вы должны иметь возможность добавлять к чему угодно. Именно так это работает с Button+Touchable.
6) Итак - совсем просто -
1. Имейте все, что хотите. Текст, изображение, панель, невидимка, анимация - что угодно.
2. Перетащите на него Button+Touchable — все готово.
Вот так все делают все кнопки в Unity!
Историческая заслуга: я считаю, что пользователь форума Unity signalZak первым додумался до этого много-много лет назад!
person
Fattie
schedule
27.04.2016
Touchable
для Unity, что является классической ситуацией обратного заполнения ОО. При обратной засыпке общая проблема заключается в том, что она должна полностью автоматически поддерживаться, и, к счастью, есть одно хорошее решение. - person Fattie   schedule 27.04.2016