Синтаксис:
Используется csharp
//объявляем глобально.
private Collider last_collider;
private Vector2 began_tap_pos
void Update()
{
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Moved)
{
// если обнаружено Moved и при этом палец уехал больше чем на 25px в какую-нить сторону, то сбрасываем коллайдер
if (last_collider != null && began_tap_pos != Vector2.zero && Vector2.Distance(began_tap_pos, touch.position) > 25)
{
last_collider = null;
began_tap_pos = Vector2.zero;
}
return;
}
if (Physics.Raycast(gameObject.camera.ScreenPointToRay(touch.position), out hit, 40, raycastLayers))
{
if (touch.phase == TouchPhase.Began) // запоминаем в начальной точке, ёё коллайдер и позицию.
{
last_collider = hit.collider;
began_tap_pos = touch.position;
}
else if (touch.phase == TouchPhase.Ended && last_collider == hit.collider) // если отжали палец, и коллайдеры совпадают — значит будет клик.
{
last_collider = null;
click(hit.collider.gameObject); // посылаем объект в метод "click", а там уже в зависимости от name делаем разные действия.
}
}
}
private Collider last_collider;
private Vector2 began_tap_pos
void Update()
{
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Moved)
{
// если обнаружено Moved и при этом палец уехал больше чем на 25px в какую-нить сторону, то сбрасываем коллайдер
if (last_collider != null && began_tap_pos != Vector2.zero && Vector2.Distance(began_tap_pos, touch.position) > 25)
{
last_collider = null;
began_tap_pos = Vector2.zero;
}
return;
}
if (Physics.Raycast(gameObject.camera.ScreenPointToRay(touch.position), out hit, 40, raycastLayers))
{
if (touch.phase == TouchPhase.Began) // запоминаем в начальной точке, ёё коллайдер и позицию.
{
last_collider = hit.collider;
began_tap_pos = touch.position;
}
else if (touch.phase == TouchPhase.Ended && last_collider == hit.collider) // если отжали палец, и коллайдеры совпадают — значит будет клик.
{
last_collider = null;
click(hit.collider.gameObject); // посылаем объект в метод "click", а там уже в зависимости от name делаем разные действия.
}
}
}
p.s. в коде в комментах расписал максимально всё.
p.s.2 Пляски с Moved и Began/End тут потому, что в некоторых сценах, есть скроллы, кручение камеры. Раньше бывало что при кручении камеры срабатывал клик по кнопке. После этих плясков стало норм.)
p.s.3 лично мне не нрав., что надо поднимать палец — чтобы тач срабатывал. Но в принципе это норм, так делают.
Короче может кому пригодиться.
Если есть идеи по оптимизации — с радостью послушаю Критика приветствуется.