У меня есть непонимание организации событий в Unity посредством EventSystem (возможно, и событий в С# в целом).
Как получается, что при наследовании интерфейса, например IPointerDownHandler, определяемая мной функция "OnPointerDown" в классе ButtnScrollMe будет вызываться именно в при конкретном событии нажатия. Я не очень понимаю как именно организовано такое событие...
кому не трудно, не могли бы вы примером как-то и ли доступной литературой натолкнуть?
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
[RequireComponent(typeof(Image))]
public class ButtnScrollMe : MonoBehaviour, IPointerDownHandler, IPointerUpHandler{
public bool dragOnSurfaces = true;
// private int Mode = 2;
private bool bStrtTime = false;
private float startTime = 0f;
private float waitTime = 0.5f;
private bool onbegin = false;
private bool ongoing = false;
private bool onend = false;
public PointerEventData eData;
public void OnPointerDown(PointerEventData eventData){
if (!bStrtTime) {
startTime = Time.time;
bStrtTime = true;
eData = eventData;
// this.gameObject.GetComponent<ButtnDragMe> ().eData = eventData;
}
}
public void Update(){
//If starts counting time
if (bStrtTime) {
if (!onbegin && !ongoing) {
if (Time.time > startTime + waitTime) {
//onBegin
onbegin = true;
}
}
if (onbegin) {
ongoing = true;
onbegin = false;
bStrtTime = false;
SetChangeEvent ();
}
}
if (onend) {
onend = false;
}
}
public void OnPointerUp(PointerEventData eventData){
bStrtTime = false;
ongoing = false;
onbegin = false;
onend = true;
}
private void SetChangeEvent(){
this.gameObject.GetComponent<ButtnDragMe>().enabled = true;
this.enabled = false;
}
}
using UnityEngine.EventSystems;
using UnityEngine.UI;
[RequireComponent(typeof(Image))]
public class ButtnScrollMe : MonoBehaviour, IPointerDownHandler, IPointerUpHandler{
public bool dragOnSurfaces = true;
// private int Mode = 2;
private bool bStrtTime = false;
private float startTime = 0f;
private float waitTime = 0.5f;
private bool onbegin = false;
private bool ongoing = false;
private bool onend = false;
public PointerEventData eData;
public void OnPointerDown(PointerEventData eventData){
if (!bStrtTime) {
startTime = Time.time;
bStrtTime = true;
eData = eventData;
// this.gameObject.GetComponent<ButtnDragMe> ().eData = eventData;
}
}
public void Update(){
//If starts counting time
if (bStrtTime) {
if (!onbegin && !ongoing) {
if (Time.time > startTime + waitTime) {
//onBegin
onbegin = true;
}
}
if (onbegin) {
ongoing = true;
onbegin = false;
bStrtTime = false;
SetChangeEvent ();
}
}
if (onend) {
onend = false;
}
}
public void OnPointerUp(PointerEventData eventData){
bStrtTime = false;
ongoing = false;
onbegin = false;
onend = true;
}
private void SetChangeEvent(){
this.gameObject.GetComponent<ButtnDragMe>().enabled = true;
this.enabled = false;
}
}