この記事について
Unityでスマホ向けゲームを作るときに欠かせないのが「タップ」「長押し」「マルチタッチ」の判定です。
特に iOS / Android / PC を同じコードで対応させたい とき、実装の工夫が必要になります。
この記事では、「GetMouseButton」と「Input.touch」を組み合わせてクロスプラットフォームに対応する方法を紹介します。
この記事で分かること
- Unityでのタップ検出方法
- 長押しを判定する仕組み
- マルチタッチを判定する方法
- PC / スマホ両対応させる実装パターン
タップ・長押し・マルチタッチの実装
タップ判定(PC/スマホ共通)
Unityはタッチをマウスイベントに変換してくれるため、「Input.GetMouseButton」を使えば PCとスマホの両方で同じコードが動きます。
using TMPro;
using UnityEngine;
public class InputTouchManager : MonoBehaviour
{
[SerializeField] private TextMeshProUGUI modeText;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log("タップ開始");
modeText.text = "Now Tapping";
}
if (Input.GetMouseButtonUp(0))
{
Debug.Log("タップ終了");
modeText.text = "Tap";
}
}
}
実行してみると、タップが判定されましたね。また、基本的にタップは指を離したときに判定する方が長押しや他の挙動とも組み合わせやすいです。
長押し判定(PC/スマホ共通)
タップと長押しの判定は「押してからの経過時間」で判定します。
using System;
using TMPro;
using UnityEngine;
public class InputTouchManager : MonoBehaviour
{
[SerializeField] private TextMeshProUGUI modeText;
private float pressStartTime;
private bool isPressing;
private float pressTime;
[SerializeField] private float longPressThreshold = 0.5f; // 長押し時間(秒)
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log("タップ開始");
modeText.text = "Now Tapping";
pressStartTime = Time.time;
isPressing = true;
}
if (Input.GetMouseButtonUp(0) && isPressing)
{
pressTime = Time.time - pressStartTime;
if (pressTime > longPressThreshold)
{
Debug.Log("長押し判定!");
Debug.Log("Time: " + pressTime.ToString());
modeText.text = "Long Tap";
}
else if (pressTime <= longPressThreshold)
{
Debug.Log("タップ判定!");
Debug.Log("Time: " + pressTime.ToString());
modeText.text = "Tap";
}
isPressing = false; // 一度だけ判定
pressTime=0;
}
}
}
実行してみると、閾値で判定が切り替わりますね。
マルチタッチ判定(スマホ専用)
「Input.touchCount」を使うことで、同時に触れている指の本数を取得できます。
PCでは無効ですが、モバイルでマルチタッチを扱いたいときに必須です。
using System;
using TMPro;
using UnityEngine;
public class InputTouchManager : MonoBehaviour
{
[SerializeField] private TextMeshProUGUI modeText;
private float pressStartTime;
private float pressTime;
private bool isPressing;
private bool isMultiPressing;
[SerializeField] private float longPressThreshold = 0.5f; // 長押し時間(秒)
void Update()
{
// --- マルチタッチ(スマホ専用) ---
if (Input.touchCount >= 2)
{
isMultiPressing = true;
}
if (Input.GetMouseButtonDown(0) && !isMultiPressing)
{
Debug.Log("タップ開始");
modeText.text = "Now Tapping";
pressStartTime = Time.time;
isPressing = true;
}
if (Input.GetMouseButtonUp(0) && isPressing)
{
pressTime = Time.time - pressStartTime;
if (pressTime > longPressThreshold)
{
Debug.Log("長押し判定!");
Debug.Log("Time: " + pressTime.ToString());
modeText.text = "Long Tap";
}
else if (pressTime <= longPressThreshold)
{
Debug.Log("タップ判定!");
Debug.Log("Time: " + pressTime.ToString());
modeText.text = "Tap";
}
isPressing = false; // 一度だけ判定
pressTime=0;
}
}
}
まとめ
- タップ/長押し/ドラッグ → Input.GetMouseButton 系でPC/スマホ共通化
- マルチタッチ → Input.touchCount を組み合わせる
これでどのプラットフォームでも同じ操作系を構築できます。