スワイプ操作イベントをつくる
概要
タッチによるスワイプ操作を作成する方法です。
準備
エディタで確認するため、以下の設定を有効にします。
プロジェクト設定 > インプット > 「タップにマウスを使用」
ブループリントを作成
どこに実装しても良いと思いますが、ここでは Player Controllerに実装します。
「追加/インポート」>ブループリントクラス>「Player Controller」で実装します。
マウスカーソルの表示
マウスカーソルを表示するように設定しておきます。
カーソルが不要であれば飛ばしてください。
ツールバーの「クラスのデフォルト」を選択してください。
マウスインターフェース>「Show Mouse Cursor」をONにします。
あるいは「Begin Play」イベントなどで変更してください。
インプットTouchイベントを作成
「インプットTouch」イベントを作成します。
タッチした(押した)時と離した時の座標を保存
「Pressed」時の位置を取得して保存します(押したときの位置)
「Get Input Touch State」で位置を取得します。
保存する変数の型は何でも良いと思います。ここではVector2d型にしました。
「Released」時も保存しておきます。
指の移動距離の差分で分岐する
つづけて、「Released」時に処理を追加します。
その距離の差分を計算して指定値以上の長さ指が動いていたかどうかを判断します。
画像では距離に100を指定しました。
指定値以上(True)ならそのまま処理を続けます。
移動方向を判別する
「X方向に多く動いていたら左右どちらかのスワイプ」
「Y方向に多く動いていたら上下どちらかのスワイプ」
と判断して分岐させます。
比較前に値を「Absolute(ABS)」で絶対値にしています。
それぞれで分岐を作成します。
Xの差分が正の数なら左方向にスワイプ、負の数なら右方向にスワイプ。
Yの差分が正の数なら上方向にスワイプ、負の数なら下方向にスワイプ
と判断します。
全体像
以上です。
指を離さない状態でもスワイプを感知したい場合は、「Tick」イベント上で差分のチェックを行って、条件を満たしたときに一度だけ実行(指を離したらリセット)するのが簡単そうですね。
お疲れさまでした!