概要
スワイプ時に指が画面上を移動した距離と方向(スワイプベクトルとここで呼ぶことにする)を取得する方法を書きました。
環境
Unity 2019 1.1f1
UniRx 6.2.2
コード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UniRx;
using UniRx.Triggers;
namespace Test
{
public class MeasureSwipeVector : MonoBehaviour
{
//指が画面に触れた位置
private Vector2 fingerDownPos;
//指が画面から離れた位置
private Vector2 fingerUpPos;
//スワイプベクトル
private Vector2 swipeVector;
private void Start() {
//マルチタッチを無効化
Input.multiTouchEnabled = false;
//指と画面が触れた位置を記録
this.UpdateAsObservable()
.Where(_ => Input.GetMouseButtonDown(0))
.Subscribe(_ => fingerDownPos = Input.mousePosition);
//指を離した位置を記録し、AmountOfMovementを計算
this.UpdateAsObservable()
.Where(_ => Input.GetMouseButtonUp(0))
.Subscribe(_ => {
fingerUpPos = Input.mousePosition;
swipeVector = (fingerUpPos - fingerDownPos) / Screen.dpi;
});
}
}
}
説明
Screen.dpi
は1 PPI(1インチに含まれるピクセル数)を表します。
単位がpixel
であるfingerUpPos - fingerDownPos
をScreen.dpi
で割ることによって、単位がinch
のスワイプベクトルswipeVector
を取得しています。