はじめに|Unityで長押しボタンを作れるようになろう!
ゲームの中で「長押ししてチャージ攻撃!」とか、「押しっぱなしでスキップできるボタン」って、よく見かけますよね。
この「長押しボタン」、実はUnityのイベント機能を使えば、初心者でもカンタンに作れちゃうんです!
この記事では、Unityで長押しボタンを作る方法を、ひとつひとつていねいに紹介していきます。
「ボタンを押した瞬間じゃなくて、一定時間押し続けたときだけ反応させたい」
「長押ししている間に、ゲージがたまっていくような演出を入れたい」
そんなあなたにぴったりの内容です!
ボタンを押す・離すといった操作は、IPointerDownHandler
やIPointerUpHandler
といったイベント系インターフェースを使えば、自由にコントロールできます。
最初は少し難しそうに見えるかもしれませんが、この記事を読みながら一緒に作っていけば大丈夫!
1. イベント系インターフェースとは
Unityでゲームを作っていると、ボタンをクリックしたときやマウスをのせたときに、何かの動きをさせたい!ってことがありますよね?
そんなときに使えるのが、イベント系インターフェースです。
これは簡単に言うと、「ボタンが押されたよ!」「マウスがのったよ!」という合図(イベント)を受け取る仕組みなんです。
主なイベントインターフェースの種類
インターフェース名 | 何ができる? |
---|---|
IPointerClickHandler | ボタンをクリックしたときの処理 |
IPointerDownHandler | ボタンが押し下げられた瞬間 |
IPointerUpHandler | ボタンから指やマウスが離れた瞬間 |
IPointerEnterHandler | マウスがUIの上に入ったとき |
IDragHandler | UIをドラッグしている間の処理 |
このように、イベント系インターフェースは「〇〇が起きたときに、こうしてね!」とUnityに伝えることができます。
たとえば、今回の長押しボタンでは「押されたとき」「離されたとき」が必要なので、IPointerDownHandler
と IPointerUpHandler
を使っていきます!
使い方はとてもシンプルで、スクリプトに「このインターフェース使います!」と宣言して、
対応する関数(メソッド)を用意してあげればOKです。
次は、その基本的な使い方を「クリックイベント」を例にして紹介します!
2. イベント系インターフェースの基本的な使い方(クリックイベントの例)
ここでは、イベント系インターフェースの基本的な使い方を、**クリックされたときの処理(IPointerClickHandler)**を例にして紹介していきます!
「ボタンが押されたら何かしたい」という時に使える、とっても便利な方法です。
手順① 名前空間の追加
まず、スクリプトの上の方にイベント系インターフェースを使うための命令文を追加します。
using UnityEngine;
using UnityEngine.EventSystems; // ←これが必要!
手順② インターフェースを宣言する
次に、スクリプトのクラス名のところで IPointerClickHandler
を使うよ!と宣言します。
public class ClickExample : MonoBehaviour, IPointerClickHandler
{
// ここに処理を書くよ!
}
MonoBehaviour
の後にカンマ「,」で区切って書きます。
手順③ メソッドを実装する
IPointerClickHandler
を使うには、決まった形のメソッドを作る必要があります。
それがこちら:
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("クリックされました!");
}
このメソッドの中に、「クリックされたらやりたいこと」を書きましょう。
今はテストとして、Debug.Log()
でメッセージを表示しています。
手順④ スクリプトをUIにアタッチする
このスクリプトを、実際にクリックされるUI(ImageやButtonなど)にドラッグ&ドロップでアタッチします。
手順⑤ 動作確認してみよう!
ゲームを実行して、スクリプトをつけたUIをクリックしてみてください。
コンソール(Console)に「クリックされました!」と表示されれば成功です!

この流れが、イベント系インターフェースの**基本の「き」**になります。
次は、これを応用して「長押しボタン」の作り方を紹介していきますよ!
UIに変化をつけたいときにすごく便利なので、ぜひ覚えていってくださいね。
3. 長押しボタンの実装方法
Unityで長押しボタンを作成するには、以下の3ステップに分けて進めていくのがわかりやすくておすすめです!
1. 長押しボタンのUI準備
まずは、シーン上に必要なUI要素を配置していきましょう。
✅ ボタン用のUIを作る
- ヒエラルキーウィンドウで右クリック →「UI」→「Image」を選びます。
- 追加されたImageオブジェクトの名前を「Button」に変更しておくとわかりやすいです。
- このオブジェクトが、ユーザーが長押しする対象になります。

✅ ゲージ表示用のImageを子オブジェクトとして作成
- 「Button」オブジェクトの上で右クリック →「UI」→「Image」を選び、子オブジェクトとしてImageを追加します。
- 名前を「Circle」などに変更しておくと管理しやすいです。
- 丸いスプライト画像があればそれを使ってください。なければ仮の画像でもOKです。

✅ ゲージ用Imageの設定を変更する
- Image Type を「Simple」から「Filled」に変更します
- Fill Method を「Radial 360」などに設定
- Fill Origin を「Top」など好みに応じて選びます
- Fill Amount を初期値「0」にします(最初は空の状態からスタート)
- Clockwise(時計回り)はチェックを外しておくと自然に見える場合が多いです

この「Circle」Imageが、長押しの進行度を視覚的に示すゲージになります。
2. スクリプトの作成
続いて、長押しを判定するスクリプトを作ります。
✅ 作成方法
- プロジェクトウィンドウを右クリック →「Create」→「C# Script」を選びます
- 名前を「LongPressButton」にします
✅ スクリプト内容(コピペOK)
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class LongPressButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
[SerializeField] private float longTapTime = 1f; // 長押しと判定する時間(秒)
[SerializeField] private Image circleImage; // ゲージImageをInspectorで指定
private bool isDown = false;
private float pressTime = 0f;
public void OnPointerDown(PointerEventData eventData)
{
isDown = true;
pressTime = 0f;
circleImage.fillAmount = 0f;
}
public void OnPointerUp(PointerEventData eventData)
{
isDown = false;
pressTime = 0f;
circleImage.fillAmount = 0f;
}
void Update()
{
if (isDown)
{
pressTime += Time.deltaTime;
circleImage.fillAmount = pressTime / longTapTime;
if (pressTime >= longTapTime)
{
isDown = false;
circleImage.fillAmount = 0f;
Debug.Log("長押し成功!");
// ここに長押し成功時の処理を追加できます
}
}
}
}
3. スクリプトの設定
スクリプトが完成したら、UnityエディターでUIに設定していきましょう。
- 作成した「LongPressButton」スクリプトを、Buttonオブジェクトにドラッグ&ドロップでアタッチします
- Buttonを選択し、Inspectorで**Circle Image(ゲージ用Image)**を
circleImage
の欄にドラッグして指定します - 必要に応じて
longTapTime
を調整します(例:2秒にしたいなら 2 に)

✅ 動作確認!
ゲームを再生して、「Button」を押しっぱなしにしてみましょう。
- ゲージがたまっていき、指定時間を超えると
Debug.Log("長押し成功!")
が表示されれば成功! - 押すのを途中でやめたら、ゲージはリセットされます
まとめ
今回は、Unityで長押しボタンを実装する方法を、UIの準備からスクリプトの作成、そしてゲージの表示まで一通り紹介してきました。
特にポイントとなるのは以下の3つです:
IPointerDownHandler
とIPointerUpHandler
を使えば、押された/離されたタイミングを正確に検出できるTime.deltaTime
を使って押下時間を測ることで、長押しかどうかを判定できるImage
のFill Amount
を使えば、視覚的にゲージ表示も可能
これらを組み合わせることで、チャージ系の攻撃や、確定操作など、さまざまなゲームUIに応用できます!
「短くタップ」と「長く押す」を分けて処理するだけでも、ゲームの操作性がぐっとアップしますよ!
あわせて読みたい
長押しボタンと組み合わせて使うと便利な機能や、UIイベント処理に関する関連記事もチェックしてみてください!
- 🔸Unity初心者必見!クリックで動きを一時停止&再開する方法
→ 長押しだけでなく、クリック一発で制御したい時はこちら。 - 🔸Unity初心者必見!クリック位置にオブジェクトを向ける方法を徹底解説
→ 入力イベントに応じてオブジェクトの挙動を変える基本が学べます。 - 🔸Unity初心者でもできる!クリックした位置に応じてボールを飛ばす方法
→ 長押しでチャージ → クリックで発射!の組み合わせにも応用できます。 - 🔸Unity初心者向け!カードの表裏に画像を表示させる方法を徹底解説
→ UI操作で状態を切り替える基本が学べる記事です。 - 🔸Unityで簡単!Prefabを順番に切り替える方法
→ 長押しによる「切り替え操作」もこの考え方と一緒!
よくある質問(FAQ)
- Qゲージが表示されないのですが、何が原因ですか?
- A
ゲージ用Imageの「Image Type」が
Filled
に設定されていない可能性があります。インスペクターで「Image Type → Filled」になっているか確認しましょう。
- Qスクリプトの
circleImage
に何も設定されていないとエラーが出ます - A
UnityエディターでスクリプトをアタッチしたUIオブジェクトを選択し、
circleImage
フィールドに「ゲージ用のImage」をドラッグ&ドロップで設定してください。
- Qスマホ操作でも長押しは反応しますか?
- A
はい、Unityのイベント系インターフェースはマウスクリックとタップ操作の両方に対応しています。スマホでも同じように動作します。