めっちゃ久しぶりのブログですw
去年は本業が忙しかったり、別のお仕事を頂いたり、プライベートで事件があったりと、気づいたら年が明けてました・・・
今回は、以前GodTouchというタッチアセットを紹介しましたが、それを発展させた
の紹介です☆

目次
GodControllerとは
スマホのマルチタッチに対応したバーチャルコントローラーです。
- Down:押した
- Up:離した
- Tap:タップ
- Swipe:スワイプ
- SwipeEnd:スワイプ終了
- Flick:フリック
- Hold:ホールド(長押し)
- HoldEnd:ホールド終了
- Pinch:ピンチ
- DoubleSwipe:ダブルスワイプ(2本指スワイプ)
- DoubleSwipeEnd:ダブルスワイプ終了
これらのイベントを登録できて、それぞれのタッチ感度も調整可能です。
全てエディタ上で確認できます(ダブルタッチはエディタではマウス右ボタンを使用)。
動作環境
Unity2021.2.5+
iPhone SE (第2世代) で動作確認済み
Xperia Z3 Compact SO-02G で動作確認済み
ライセンス
本アセットではユニティちゃんライセンス条項の元に提供されています。
使用方法
アセットをインポート
直接ファイルをインポートしてもいいし、GodController.unitypackage
を使ってもOK。
ルートディレクトリは以下のようになってます。
- GodController:アセット本体
- GodControllerDemo:デモ
- UCL2.0:ユニティちゃんライセンス関連ファイル(デモ用)
- UnityChan:ユニティちゃんアセット(デモ用)
GodController
ディレクトリ以外はデモ用なので削除しても大丈夫です(容量削減可能)。
GodControllerを追加

設定値 | 内容 |
---|---|
TapTime | タップ時間。この時間内ならタップ可能。 |
TapDistance | タップ距離。この距離内ならタップ可能。 |
SwipeDistanceX | スワイプ距離X。この距離を超えたらスワイプ開始。 |
SwipeDistanceY | スワイプ距離Y。この距離を超えたらスワイプ開始。 |
StopSwiping | スワイプ中停止可能フラグ。通常はスワイプに移行したら動き続けるが、このフラグがtrue の場合はスワイプ中の停止が可能になる(自作ゲームの都合)。 |
FlickTime | フリック時間。この時間内ならフリック可能。 |
FlickDistanceX | フリック距離X。この距離を超えたらフリック可能。 |
FlickDistanceY | フリック距離Y。この距離を超えたらフリック可能。 |
HoldTime | ホールド時間。この時間より押し続けたらホールド開始。 |
PinchDistance | ピンチ距離。2本指がこの距離より離れたらピンチ開始。 |
PinchMin | ピンチの最小値。1 = 100% |
PinchMax | ピンチの最大値。1 = 100% |
DoubleSwipeDistanceX | ダブルスワイプ距離X。2本指が両方ともこの距離を超えたらダブルスワイプ開始。 |
DoubleSwipeDistanceY | ダブルスワイプ距離Y。2本指が両方ともこの距離を超えたらダブルスワイプ開始。 |
イベントを登録
Inspector
かスクリプトからイベントを登録。

[SerializeField] GodController controller;
void Start()
{
controller.OnDown.AddListener(OnDown);
controller.OnUp.AddListener(OnUp);
controller.OnTap.AddListener(OnTap);
controller.OnSwipe.AddListener(OnSwipe);
controller.OnSwipeEnd.AddListener(OnSwipeEnd);
controller.OnFlick.AddListener(OnFlick);
controller.OnHold.AddListener(OnHold);
controller.OnHoldEnd.AddListener(OnHoldEnd);
controller.OnPinch.AddListener(OnPinch);
controller.OnDoubleSwipe.AddListener(OnDoubleSwipe);
controller.OnDoubleSwipeEnd.AddListener(OnDoubleSwipeEnd);
}
操作方法はデモ参考。
【注意点】なんで作ったのか?
元々2Dと3Dのプロジェクトを作ってて、それぞれで同じ様なタッチ操作が必要になったのでアセット化しました。なので、今後も自プロジェクトの都合で修正していくかもです。
大きくは変えない予定ですが、破壊的変更も行われるかもしれないんで、導入する際はご注意ください(コードを参考にするくらいがちょうどいいかと思います)。
あとデモでユニティちゃんを使用してるだけなので、GodControllerのプログラム自体は自由に改変しちゃってOKです!
ただし修正依頼は受け付けてないので、その場合はフォークしてね☆
デモ
スワイプ / スワイプ終了
スワイプするとユニティちゃんが歩きます。
スワイプ終了で止まります。
StopSwiping
がtrue
の場合はスワイプ中の停止が可能になります(自作ゲームの都合)。
ホールド / ホールド終了
ホールド後にスワイプするとユニティちゃんが走ります(歩行からランに変化)。
スワイプ終了で止まります。
注意点として、ホールド終了はタッチ終了時に呼ばれます(スワイプ移行時には呼ばれない)。自作ゲームの都合で、ホールド → スワイプ
でのモーション変化を考慮したためです。必要な方はスワイプ移行で呼ばれるようにしてもいいかもしれません。
フリック
フリックするとユニティちゃんがジャンプします。
タップ
タップするとユニティちゃんが頭突き攻撃します。
攻撃モーションがなかったのでジャンプの途中モーションで代用しました笑
ピンチ
ピンチするとカメラをズームします。
エディタの場合、マウス右ボタンを押しながらマウスホイールすることで、ピンチを行います。
注意点として、ピンチやダブルスワイプなどダブルタッチの場合は、一度どちらかに移行した場合はずっとそのままです(操作を安定させるため)。
ダブルスワイプ / ダブルスワイプ終了
ダブルスワイプするとカメラを横方向か縦方向に平行移動します。
エディタの場合、マウス右ボタンを押しながらスワイプすることで、ダブルスワイプを行います。
自由移動にしてもよかったんですが、今回はあえてこうしました(操作を安定させるため)。
Animatorは諸刃の剣
【Unity】Animatorのアニメーション終了待ちをする方法
まさにこれなんですが、今回、タッチ部分よりAnimator
の制御の方に苦戦しました。。
Animator
の終了を検知するのが大変なんですよね。
今回はステートの切り替わりを検知する方法で対処しましたが、やっかいだったのがステートが切り替わるのが1フレーム後っていう…。
個人開発レベルだったら素直にAnimation
を直接使った方が楽ですね。
ただ本業では大規模開発を行ってるのですが、こっちではAnimator
大活躍☆
仕組みさえ作ってしまえば、あとはデザイナーさんのみで作業できるので、とてもリッチなアニメーションを量産できます。
Animatorは諸刃の剣だなぁ。
最後に
ユニティちゃんも可愛いいけど、ミトちゃんも可愛い(´,,•ω•,,`)
〜オセロを作りながらゲームのプログラムを学ぼう〜