前回の記事で、新 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 をお使いください)




