[unity2019]PadInput にタッチスクリーンを拡張する

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

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA