UnityUnityメモ

Unityでスワイプ操作を実装する方法【初心者でも簡単】

Unity

✅ はじめに

スマホゲームを作っていて、「スワイプ操作を入れたいな〜」と思ったことはありませんか?

実は、Unityを使えばスワイプ操作って意外とカンタンに実装できるんです!
たとえば、画面をスッと右にスワイプしたらキャラクターが右に動く、上にスワイプしたらジャンプする…そんな操作って、今やスマホゲームの基本ですよね。

でも、「どうやってスワイプを判定するの?」とか「コード難しそう…」って不安になる方も多いはず。
そこでこの記事では、Unity初心者の方でもすぐに使える“シンプルなスワイプ検出スクリプト”の作り方を、やさしくステップバイステップで紹介していきます!

もちろん、「コピペですぐ使えるコード」も用意しているので、
Unityを触り始めたばかりの人でも安心してチャレンジできますよ!

まずはスワイプ操作の基本から、一緒に楽しく覚えていきましょう!




✅ スワイプ操作ってどんな仕組み?

スワイプって、なんとなく「指でスーッと動かす操作」というイメージがありますよね。
でも、ゲームにそれを組み込むためには、ちょっとした“しくみ”を知っておく必要があります。

ざっくり説明すると、スワイプ操作の流れはこの3ステップです:

  1. タッチが始まった場所(開始位置)を記録する
  2. タッチが終わった場所(終了位置)を記録する
  3. 開始位置と終了位置の差を比べて、スワイプ方向を判断する

たとえば、指を右方向に動かした場合、終了位置のX座標が開始位置より大きくなります。
この差から「右スワイプだな」と判定するわけです。

また、スワイプには「どのくらい動かしたか?」も大事なポイント。
ほんのちょっと指を動かしただけなら、意図しない操作と判断して無視することもあります。

🎯 スワイプ判定の基本ロジック

  • 横方向(左右)に動きが大きい → 横スワイプ
  • 縦方向(上下)に動きが大きい → 縦スワイプ
  • 動きが小さすぎる → スワイプとはみなさない(しきい値を設定)

この考え方さえ理解できれば、あとはスクリプトでそれをどう処理するかを覚えるだけです!
次のセクションでは、実際にスクリプトを作って、スワイプ判定を実装してみましょう♪




✅ 必要な準備:新しいスクリプトを作成しよう

それではいよいよ、スワイプ操作を判定するためのスクリプト作成に入っていきましょう!

今回は、スワイプの方向(上下左右)を検出できるようにするスクリプトを作ります。
まずは空のGameObjectとスクリプトを用意しましょう。

🔧 ステップ①:空のGameObjectを作成

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリック
  2. Create Empty(空のオブジェクト)」を選択
  3. 名前を「SwipeManager」に変更しておくと分かりやすいですよ!

💻 ステップ②:新しいスクリプトを作成

  1. プロジェクトウィンドウの中で右クリック
  2. Create」→「C# Script」を選びます
  3. スクリプト名を「SwipeDetector」と入力してEnter!

📝 ポイント
スクリプト名とクラス名は一致していないとエラーが出るので、スペルミスに注意してくださいね!

📥 ステップ③:スクリプトをGameObjectにアタッチ

作成した「SwipeDetector」スクリプトを、さきほど作った「SwipeManager」オブジェクトにドラッグ&ドロップするだけでOK!

これで準備はバッチリです!
次は、実際にスワイプの動きを検出するコードの中身を書いていきますよ!




✅ スワイプ検出スクリプトの書き方(サンプルコード付き)

ここからは、実際にスワイプを検出するスクリプトを作っていきます!

今回は、1本指のスワイプ操作(上下左右)を判定するシンプルな例を紹介します。
スマホ画面で「スッ」と指を動かした方向を読み取って、Debug.Log()で結果を表示するコードです。

📜 サンプルコード

using UnityEngine;

public class SwipeDetector : MonoBehaviour
{
private Vector2 startPos;
private Vector2 endPos;

void Update()
{
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);

if (touch.phase == TouchPhase.Began)
{
startPos = touch.position;
}
else if (touch.phase == TouchPhase.Ended)
{
endPos = touch.position;
DetectSwipe();
}
}
}

void DetectSwipe()
{
Vector2 delta = endPos - startPos;

// スワイプ距離が小さすぎたら無視
if (delta.magnitude < 50f)
{
return;
}

if (Mathf.Abs(delta.x) > Mathf.Abs(delta.y))
{
if (delta.x > 0)
{
Debug.Log("右スワイプ!");
}
else
{
Debug.Log("左スワイプ!");
}
}
else
{
if (delta.y > 0)
{
Debug.Log("上スワイプ!");
}
else
{
Debug.Log("下スワイプ!");
}
}
}
}

🧠 コードのポイント解説

  • startPosendPosでタッチの開始・終了位置を記録します。
  • delta(移動距離)を使って方向を判定。
  • delta.magnitudeでスワイプ距離を測り、50ピクセル未満ならスワイプとみなさず無視します(誤タッチ防止!)。
  • 横方向と縦方向の動きの大きさを比べて、どっちのスワイプかを判定しています。

このスクリプトを動かすと、画面上でスワイプしたときにコンソールに「右スワイプ!」「下スワイプ!」などのログが表示されます。
動きに応じたアクションを追加するのも、このあと簡単にできますよ♪




✅ クリックでも動作確認できるようにする方法(PCエディタ用)

「スマホでタッチ操作はできるけど、いちいちビルドして確認するのは面倒…」
そんなときは、マウスのクリック操作でスワイプ検出を代用するのがオススメです!

Unityエディタ上でも簡単に動作確認ができるように、タッチ入力の代わりにマウスの押下&ドラッグでも同じような判定ができるようにしましょう。

以下のように、既存のスクリプトにエディタ用のコードを追加するだけでOKです!


🧪 追加するコード(スクリプトに追記)

#if UNITY_EDITOR
// マウス操作でもスワイプを確認できるようにする
void LateUpdate()
{
if (Input.GetMouseButtonDown(0))
{
startPos = Input.mousePosition;
}
else if (Input.GetMouseButtonUp(0))
{
endPos = Input.mousePosition;
DetectSwipe();
}
}
#endif

📌 補足ポイント

  • #if UNITY_EDITOR で囲むことで、PC上で動作するのはエディタ内のみになります。
  • Update()LateUpdate() が両方あるのはちょっと変な感じがするかもしれませんが、マウス用とタッチ用を分けておくと管理しやすくなります
  • スマホ向けのアプリでも、エディタ上でのテストがすごく楽になりますよ!

これで、Unityエディタ上でもタッチ不要でスワイプ動作を再現できるようになりました!




✅ スワイプで何ができる?応用例を紹介

スワイプ操作ができるようになると、スマホゲームの操作性が一気にレベルアップします!

ここでは、スワイプ操作を使ったいろいろな活用例を紹介します。
自分のゲームに「これ使えそう!」というアイデアがあったら、ぜひ取り入れてみてくださいね!


🎮 ① キャラクターをスワイプで移動させる

たとえば、画面を左にスワイプしたらキャラクターが左に動く、
右にスワイプしたら右へ進む…といった直感的な移動操作ができます!

if (delta.x > 0)
player.MoveRight();
else
player.MoveLeft();

シンプルながらも操作しやすく、2Dランゲームなどにピッタリの仕組みです!

👉 ちなみに、スワイプやピンチでのカメラ移動やズームもサクッと実装したい方にはこのアセットが超便利です!
📦 Mobile Touch Camera(アセットストア)
ドラッグでパン・2本指でズームなど、スマホ向けの直感操作をワンタッチで導入できます。


📄 ② UIのページ切り替えに使う

スワイプで画面を切り替えるのは、スマホアプリでもよく見かけますよね。
UnityのUIシステム(Canvas)と組み合わせれば、ページ切り替え・スライドメニューなども簡単に実装できます!

if (swipe == "左")
ShowNextPage();
else if (swipe == "右")
ShowPreviousPage();

🕹️ ③ アクションに応用!スワイプで攻撃や回避

スワイプ上でジャンプ、下でしゃがむ、左右で回避!
といったアクション操作のトリガーとして使うのもアリです。

スマホ向けの格闘ゲームやランゲームで、操作ボタンを最小限にしたいときに大活躍します。


💡 おまけ:複数スワイプでコンボ技も?

左右スワイプ → 上スワイプ で「必殺技発動!」みたいに、
スワイプの連続やパターンを読み取ることで、ゲーム性をさらに広げることもできます。

スワイプ操作は単なる移動だけじゃなく、UIや演出の幅を広げてくれる便利な入力方法です。
ぜひ、自分のゲームに合った形で活用してみてくださいね!




✅ よくあるミスと対処法

スワイプ操作はシンプルに見えて、最初はちょっとしたうっかりミスでうまく動かないこともあります。
ここでは、初心者がよくハマりがちなミスと、その解決法を紹介します!


❌ ミス①:Input.touchCount が 0 のときに処理を書いている

if (Input.touchCount == 0)
{
// タッチしてないので何も起きない
}

🛠 対処法
スワイプを検出したいなら、Input.touchCount > 0 のときに処理する必要があります。
TouchPhase.BeganEnded を使って、タッチの開始と終了をチェックしましょう!


❌ ミス②:スワイプ距離が小さすぎて判定されない

if (delta.magnitude < 50f)
{
return;
}

🛠 対処法
しきい値(距離)を50f → 30fくらいに変更して、試してみましょう。
あまり小さくしすぎると誤タッチが増えるのでバランスが大事!


❌ ミス③:縦スワイプと横スワイプの判定が逆になる

if (Mathf.Abs(delta.x) > Mathf.Abs(delta.y)) // 横スワイプ判定

🛠 対処法
画面の座標は**左下が(0, 0)**なので、Y軸の増減方向に注意しましょう。
縦方向のスワイプ判定で「上スワイプ=Yが大きくなる」という点を意識してください。


❌ ミス④:PCエディタ上で確認しようとして動かない

🛠 対処法
タッチ入力はスマホでないと動作しません。
Unityエディタ上でテストする場合は、Input.GetMouseButtonDown() などマウス判定を追加しましょう(前の章で紹介済み)。


❌ ミス⑤:複数タッチが影響して想定外の動作になる

🛠 対処法
スワイプ判定は Input.GetTouch(0)(最初の指だけ)に限定して処理すると安定します。
複数タッチを使いたいときは、タッチIDやタッチ数を管理する必要があります。

これらのポイントを押さえておけば、スワイプ実装でつまずくことはグッと減りますよ!




✅ まとめ

今回は、Unityでスワイプ操作を実装する方法について、初心者でもすぐに試せるステップ形式で紹介しました。

スマホゲームでは、スワイプ入力はもう当たり前のように使われている操作です。
でも、実際に自分で実装してみると、「あっ、意外と簡単かも!」と感じてもらえたのではないでしょうか?

ポイントはこの3つ!

  • タッチの開始位置と終了位置を記録する
  • 差分からスワイプの方向を判定する
  • PCでもテストできるようにマウス操作を取り入れる

このスクリプトは基本形なので、自分のゲームに合わせていろいろ応用できます!
たとえば、スワイプでキャラを動かす、UIを切り替える、攻撃や回避に使う…などアイデア次第で可能性は無限大です。


👇 今回の内容をもっと手軽に実現できるアセットもあります!
Touch Controls Kit を使えば、スワイプやタッチボタンをほぼノーコードで追加可能です。
Unity初心者でも扱いやすいUI付きで、スマホ操作を一気にプロっぽく仕上げられますよ!

よくある質問(FAQ)

Q
スワイプの感度を調整するにはどうしたらいい?
A

delta.magnitude < 50f などの部分でしきい値を変更することで、スワイプとして認識する距離を調整できます。

Q
上下左右のスワイプ以外にも、ななめ方向って判定できますか?
A

はい、可能です。X軸・Y軸の数値を両方使えば、8方向スワイプも実装できます。

Q
タップ(指を置いてすぐ離す)とスワイプをどう区別する?
A

スワイプ距離が短い(たとえば delta.magnitude < 10f)ならタップと判定する、という条件を加えると区別できます。

タイトルとURLをコピーしました