Unityでスマホのタッチ認識をしてみる(1)

シェアする

  • このエントリーをはてなブックマークに追加

Unityでスマホ向けのゲームを作成するときに必須になるのはタッチパネルでの操作になります。
Unityの入門書を何冊か読んだのですが、タッチの操作が解説してある本はあまり無いですね。バーチャルジョイスティックに対応するやり方は結構見かけますが、スマホ専用のゲームはタッチで操作できないとゲームとして成立しません。

タッチをサポートするAssetも有料・無料でいくつかあります。TouchScriptなどが人気のようですが、使い方を覚えないといけないので、まずはUnityの基本のクラスだけで実装してみたいですね。

まず、Unityでは、マウスでの操作とタッチの操作は全く別物として認識されます。なので、タッチの操作を実装すると、PC上でマウスでドラッグしても反応しないので、デバッグがやりにくくなります(上記のTouchScriptを使うと、マウスの操作とタッチの操作を同時に実装できたりします)。認識の部分はマウスとタッチの両方を書いて、そこから呼び出されるメソッドは共通にする(Inputの抽象化)というのがベストプラクティスだと思いますが、入門者にはつらい・・。ということで、今回は実装するのはタッチ操作のみとします。

ではデバッグはどうするかというと、実機で行うことになります。ただし、Unityで実機用にビルドするのは非常に時間がかかる(特にiOS版)ので、「Unity Remote 4」を使用することにします。AppStoreなどから無料でダウンロードできます。

これをスマホに入れて、USBでスマホを接続し、Unity側のメニューの Edit > Project Settings > Editorを選び、「Device」から接続したスマホを選択します。これで実行するだけで、スマホ側でもゲーム画面が表示され、タッチによる操作を行うことができるようになります。

では、タッチを認識するために、Inputクラスのリファレンスを見てみましょう。
Inputクラスでは、タッチやマルチタッチの他に加速度センサーなども取れる、と書いてあります。やはりこのクラスを理解するのがスマホゲーム作成への近道のようです。
タッチ関連のプロパティを見てみると、touchCountやtouches、というのがあります。マルチタッチなので、タッチは複数になるということですね。

ではまず、「画面がタッチされた」という一番簡単なパターンから。
touchCountはint型なので、その数で判断します。

void Update()
{
	if(Input.touchCount > 0)
	{
 		Debug.Log("Touched!");
	}
}

ね、簡単でしょ?(ボブ風)
そして一歩進んで、タッチされた座標も表示してみます。

touchesというのがそれらしいのでリファレンスを見ると、touchesはTouch[](Touchの配列)である、ということがわかります。

じゃあそのTouchって何、とまたリファレンスを見ると、タッチされた座標や移動の差分などが入っています。これは使えそうですね。

ということで、リファレンス中のサンプルを参考にして書いてみると、

void Update()
{
		if(Input.touchCount > 0)
		{
			foreach(Touch t in Input.touches)
			{
				if (t.phase != TouchPhase.Ended && t.phase != TouchPhase.Canceled)
				{
 
					Debug.Log("x=" + t.position.x + " y=" +  t.position.y);
				}
			}
		}
}

こんなふうに書けます。TouchPhaseというのは、

Began 画面に指が触れたとき
Moved 画面上で指が動いたとき
Stationary 指が画面に触れているが動いてはいないとき
Ended 画面から指が離れたとき
Canceled 認識できる指以上をタッチしたり、何らかの状態でキャンセルになったとき

ということなので、EndとCancel以外を表示しています。(逆に言うと、touchCountにはそれらも含まれちゃうんでしょうかね?)

第1回はここまで・・

Unityでスマホのタッチ認識をしてみる(2)
前回はざっとTouchを取得してみる、ということをやってみましたが、今回はもう少しTouchを深堀りしてみたいと思います。 前回、fo...
Unity 2Dでスマホのタッチ認識をしてみる(3)
前回はTouch構造体の中身を見てみました。 今回は実践ということで、タッチでGameObjectを消す、というのをやってみたいと思います...
Input.Touchesをエディタでデバッグする方法
UnityでInput.Touchを使うとスマホのタッチ操作を認識できる、というのを前に書きました 上記にも書...
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

App Store