[UE4]汎用性のないスマホのピンチ操作とスワイプ操作の仕方

ue4 スマホ向けの操作作りメニュー編


メニュー周りの操作としてマップ画面でスワイプしてカメラスクロールとピンチイン・アウトでズームとステージのオブジェクトをタッチする機能がほしいとおもったので作ってみます。


最初にマップ画面でオブジェクトをタッチする方法について


まず思いついた方法は、BOXコリジョンのOnInputTouch系のイベントから判定する方法でした。

簡単でいいんですがどこかのブログでスマホではタッチを離すときにイベントのが良いと書いてあったので(誤タップしても他の場所で離せばやり直せるという理由で)使うのをやめました。

OnInputTouchEndは指を離す時だと思ったんですが画面から離すという意味ではなくコリジョンから離れるという意味でした。
(指を画面につけたままスライドさせてコリジョンから離れる時にもイベントが発動してしまう)

そこでPlayerControllerでどのオブジェクトをタップしたか判定するようにしました。


試行錯誤しましたが、完成品を見て説明していきます。

まずInputTouchのPressedピンからBranchでステージ説明画面が出てないか確認します。
(ブログ書いてて気付きましたがこれはマップ選択画面ウィジェットが出ているかで判定した方がいいですね)

セットしている変数はスワイプの時に使う変数です。

LocationピンからXYをConvertScreenLocationToWorldSpaceノードでスクリーン座標をワールド座標に変換してそこからLineTraceします。

EndはWorldDirectionを1500掛けた数にします。

その後はヒットしてたらTagにStageがあるか調べてイベントディスパッチャーでタップされたことを送ります。

指を離した時にタップした時と同じアクターかで判定するのでアクターは変数に入れます。


指を離した時の処理です。


タップした時とほとんど同じですね。

うえで書いたように判定部分だけ違います

次はスワイプでカメラを動かす方法です。

この処理はX軸のスワイプのみに対応してます。


まずInputTouchのMovedピンからワイヤーを伸ばします。

Movedピンは指を動かしている間、処理が流れるピンです。タップしただけだと処理が流れません。

現在のXの数値から前フレーム保存していた数値をを引いて、何故か0の時があるので0以外の時で
ーか+かで分岐させて、カメラアクターのロケーションを動かして完成です。

最初の移動時はTouchX変数に変な数値が入ってるのでタップした時のXの数値をTouchX変数に入れてます。

ピンチイン・アウトでカメラのズーム処理



ピンチ操作はプロジェクト設定のAxis MappingsにPinchの設定をすればAxis valueがわかります。

Axis valueは指の間隔が狭い時ほど0になり広くなるほど大きくなる値です。トリガーボタンみたいな感覚ですね。

なので現在の値から前フレームの値を引いてーか+で判定すれば、ピンチイン・アウトが分かリます。

最初はマウスホイールと同じでaxis Valueがーと+で取れるのかなと思い、同じ処理で作ってみたら出来なくて、他の方法を色々調べてみたけどうまく行かず、スマホでデバッグ表示して見たらトリガーみたいな数値の変わり方なのがわかり処理を作れました。

0 件のコメント :

コメントを投稿