前回の記事で、新 InputSystem をさらに便利にするためのクラス PadInput を紹介しましたが、以下の拡張を行いました。
タッチスクリーン操作も可能に
Unity Editor 上では、マウス操作でタッチスクリーンをシミュレートできるように
ダウンロード
タッチ操作の取得方法
タップされたか(GetKey)、タップされた場所はどこか(GetTouchPos)の2つを使います。
なお、ほとんどのゲームでは同時タッチ操作は3つもあればいいと考え、最大3つまでの取得となっています。
Debug.Log($"press: {Padd.GetKey(ePad.Touch1)} x:{Padd.GetTouchPos(0).x} y:{Padd.GetTouchPos(0).y}");
PadVector について
Vector2 で返していた以下のメソッドは全て PadVector になっています。
参照渡しの方がコストにいいかな? というのと、移動したフレームは IsMoved == true になるため、移動した時だけ処理するような、エコなコードを記述できるようになります。
public class PadVector { public Vector2 Vector; public bool IsMoved; } public PadVector GetAxisL(); public PadVector GetAxisR(); public PadVector GetTrigger(); public PadVector GetMousePos(); public PadVector GetTouchPos(int no);
マウスのタッチシミュレーションについて
タッチ情報の保管バッファに、マウスの情報を流し込んでいるだけです。
具体的には以下のコード。
#if UNITY_IOS || UNITY_ANDROID #if UNITY_EDITOR // UNITY_EDITOR ではマウスをタッチの代わりに見立てる pad.TouchPos[0] = pad.MousePos; if ((pad.Button & B_MouseLeft) != 0) pad.Button |= B_Touch1; #endif #endif
その他細かい修正点
- パッドのアナログ値について、-0.2f ~ 0.2f は無入力と見なすようにしました(ヘタれスティック対策)
- マウス移動で AnyKey がオンになってしまう問題を修正しました。(マウスの移動確認にはGetMousePos().IsMoved をお使いください)