Практикуюсь в Unity и на данный момент хочу создать пианино.
Как сделать, чтобы созданные (UI - buttons) кнопки срабатывали после прикосновения пальца, то есть, можно было водить по набору кнопок не отпуская пальца от экрана и при этом они воспроизводили заданный мною скрипт?
На данный момент, чтобы кнопка воспроизвела мой скрипт, нужно отпустить палец именно в её зоне.
Унаследоваться от Button
и реализовать OnPointerDown
:
public class MyBestButton : Button {
[...]
public override void OnPointerDown(PointerEventData eventData) {
base.OnPointerDown(eventData);
if (eventData.button != PointerEventData.InputButton.Left) return;
// здесь делаем всякое разное
}
}
Ну или через AddComponent
навесить триггер, если не хотите классов создавать:
EventTrigger trigger = myButton.gameObject.AddComponent<EventTrigger>();
var pointerDown = new EventTrigger.Entry();
pointerDown.eventID = EventTriggerType.PointerDown;
pointerDown.callback.AddListener(delegate(BaseEventData arg0) {
// тут делаем всякое разное
});
trigger.triggers.Add(pointerDown);
Можно посмотреть в сторону реализации интерфейсов Event System. В вашем случае это может быть IPointerEnterHandler.
Т.е. классу задаётся наследование от данного интерфейса, пишется реализация этого метода, а сам класс вешается на объект-клавишу.
Когда курсор будет входить в область кнопки - у класса будет вызываться этот метод. Внутри метода вы можете проверить зажата ли сейчас кнопка мыши и если зажата - произвести действие.
Можете рассмотреть альтернативный метод, как бы велосипед, достаточно в ваш скрипт добавить использование интерфейса и всё.
public class Keys: MonoBehaviour, IPointerDownHandler, IPointerUpHandler {
public AudioClip Sound;
public AudioSource source; // ну или сразу запихите этот аудиоСурс в поле, дабы не вызывать GetComponent.
public Image image; // можете такое добавить, если хотите регулировать цвет самостоятельно, без использования компонента Button
void Start(){
source = GetComponent<AudioSource>();
}
public void OnPointerDown(PointerEventData eventData){
source.PlayOneShot(Sound);
image.color = Color.yellow;
}
public void OnPointerUp(PointerEventData eventData){ // это опционально
image.color = Color.white;
}
}
Рекомендую вам не использоваться AddComponent так как это трудоёмкий процесс добавления компонента на объект.
У меня создаются по нажатию на кнопку контролы, два TextBox Вопрос: как мне получить значение нужного контрола? Если допустим, они создаются и у каждого...
При попытках компиляции C# высвечивается ошибка, что комп не знает что такое SystemWindows