240465-
お世話になります!
コツコツとモバイルゲームをつくりながら勉強している者です。行き詰まってしまい、ぜひ相談にのって下さい。
いま製作中のゲームのバインディング→インプットActionMappingsには「Touch1」
AxisMappingsには「Touch2」を設定しています。
(画像 ⇨ キャプチャ1)
タッチインターフェイス(Touch2)を動かすとプレイヤーが左右に移動し
タッチインターフェイス以外の画面をタッチ(Touch1)すると
プレイヤーからタッチ座標に攻撃が飛んでいく仕様です。
(画像 ⇨ キャプチャ0)
240473-
ここで、ぶつかっている事なのですが、UE4のPIEでは理想の動作が確認できるのですが、
Androidでのデバイス実機テストでは
「Touch2を入力しながらTouch1が機能しない」という事です。
Touch2を押さずにTouch1を押せば機能します。
その逆の「Touch1を入力しながらTouch2の入力」は出来るのですが、
この2つの入力をスマートフォンでもスムーズに機能させる方法はありますでしょうか?
(うまく説明できていなかったらすみません!)
Touch1 と Touch2のブループリントはそれぞれこちらです。
Touch2(タッチインターフェイス)⇨ キャプチャ2 (プレイヤーのBP内に書いています。)
Touch1 ⇨ キャプチャ3 (プレイヤーコントローラーのBP内に書いています。
画像が見にくかったり、情報が不足してる部分など、ありましたら遠慮なく言って下さい。
まず、タッチ入力においてFingerIndexがどのように認識されているかを検証してみましょう。
今回でいう Touch1
や Touch2
ですが、どのように認識されているかというと、
それぞれ 1番目に触れた指
と 2番目に触れた指
です。
触れた順番に FingerIndex
が割り振られることになります。
まず最初のケースですが 「Touch2を入力しながらTouch1が機能しない」
とありますが、上記の条件を当てはめると成り立たないことがわかります。
後から触れたほうが Touch2
です。
必要な入力は Touch1
であるため、 Touch1
に割り振られている処理は動作しません。
「Touch1を入力しながらTouch2の入力」
のケースですが、こちらは先に Touch1
が入力されているので、問題は出ていません。
さて、問題の解決法ですが…
まず、MobileのTouchInterfaceは、Gamepadの入力(Left Thumbstick入力)として扱われます。
(デフォルトの LeftVirtualJoystickOnly
を使用していれば、そのように設定されています)
なので、移動は Gamepad Left Thumbstick
の入力に変えてしまいましょう。
もう一つ、Touch入力に関してですが、 InputTouch
というイベントがあるのでそちらから取得するようにしてみましょう。
処理に必要なものはすべて取得できます。
この回答の内容がよくわからない場合は、新規に2DSideScrollerのテンプレートからプロジェクトを作成し、実機転送して見てみるとよいと思います。
T_Sumisaki 様
ご回答ありがとうございます!
FingerIndexやTouchInterfaceの仕組みと問題の原因をご丁寧に説明頂き、お陰さまでしっかり理解できました!
そして、教えて頂いた解決方法で無事に実機でも理想の挙動になりました!
インプットTouchのLocationから座標をとってもっと無駄のないBPの組み方もできるかな?と思い色々試したのですが、
インプットTouchのFingerIndexからはTouch1が出力されていたので、そのままGet Hit Result~の
FingerIndexに繋げたらうまくいきました!
今から2DSideScrollerテンプレートを実機テストして、さらに理解を深められるようにします!
ありがとうございました!