はじめに
Unityでモバイルアプリを作成する際に、スワイプを検知する方法について調べました。
スワイプ検知
下記コード1をGameObjectにアタッチするとスワイプを検知できます。
DetectSwipe.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SwipeDetector : MonoBehaviour
{
private Vector2 fingerDown;
private Vector2 fingerUp;
// 指を離したときだけ処理を行う
public bool detectSwipeOnlyAfterRelease = false;
// しきい値以上スワイプするとスワイプとして検知する
public float SWIPE_THRESHOLD = 20f;
void Update()
{
foreach (Touch touch in Input.touches)
{
// スワイプをし始めた位置を記録する
if (touch.phase == TouchPhase.Began)
{
fingerUp = touch.position;
fingerDown = touch.position;
}
if (touch.phase == TouchPhase.Moved)
{
if (!detectSwipeOnlyAfterRelease)
{
fingerDown = touch.position;
checkSwipe();
}
}
if (touch.phase == TouchPhase.Ended)
{
fingerDown = touch.position;
checkSwipe();
}
}
}
void checkSwipe()
{
// しきい値以上縦方向にスワイプしたかどうか判定する
if (verticalMove() > SWIPE_THRESHOLD && verticalMove() > horizontalValMove())
{
if (fingerDown.y - fingerUp.y > 0)
{
OnSwipeUp();
}
else if (fingerDown.y - fingerUp.y < 0)
{
OnSwipeDown();
}
fingerUp = fingerDown;
}
// しきい値以上横方向にスワイプしたかどうか判定する
else if (horizontalValMove() > SWIPE_THRESHOLD && horizontalValMove() > verticalMove())
{
if (fingerDown.x - fingerUp.x > 0)
{
OnSwipeRight();
}
else if (fingerDown.x - fingerUp.x < 0)
{
OnSwipeLeft();
}
fingerUp = fingerDown;
}
}
float verticalMove()
{
return Mathf.Abs(fingerDown.y - fingerUp.y);
}
float horizontalValMove()
{
return Mathf.Abs(fingerDown.x - fingerUp.x);
}
void OnSwipeUp()
{
}
void OnSwipeDown()
{
}
void OnSwipeLeft()
{
}
void OnSwipeRight()
{
}
}