Unityで、オブジェクトダブルクリック時の処理を追加しようとしても、どうしたらよいのか困っていませんか。Event Triggerでシングルクリックはあるけど、ダブルクリックが無い・・・。
今回の記事では、オブジェクトをダブルクリックしたときに色を変更するサンプルを作りながら、Event Triggerにダブルクリックを追加する方法を解説します。
こんな人におすすめ!
- オブジェクトをダブルクリックしたときの処理が作れなくて困っている人
- Unityを使ったゲーム制作の基本を学びたい初心者
Event Systemオブジェクトを追加する
まず初めに行うことがEvent Systemオブジェクトを追加することです。
Event Systemは、マウスクリックやディスプレイタッチしたときに、オブジェクトへイベントを送信するのを管理してくれます。
Hierarchyウィンドウから「UI」 > 「Event System」をクリックしましょう。
設定はデフォルトのままで大丈夫です。
Main CameraにPhysics 2D Raycasterコンポーネントを追加する
次にゲーム画面でオブジェクトをクリックしたときにイベントが発生出来るよう、Main CameraにPhysics 2D Raycasterコンポーネントを追加します。
Physics 2D Raycasterは画面クリックした位置から光線を発し、衝突したオブジェクトにメッセージを送信する役割です。オブジェクトが衝突を検知することによって、オブジェクトがクリックされたことが分かります。
InspectorウィンドウでAdd Componentボタンをクリックし、Physics 2D Raycasterコンポーネントを追加しましょう。
これも設定はデフォルトでOK。
ダブルクリックしたときに色が変更されるオブジェクトを追加する
続いてダブルクリックされるオブジェクトの設定に移ります。適当な2Dオブジェクトをまず追加しましょう。
ダブルクリック判定作成の流れは、次のようになります。
- Physics 2D Raycasterからの光線との衝突を検出出来るようCollider追加
- Colliderが衝突検知したときにEvent Triggerでクリックを判定
- 2回連続でクリックしたことをスクリプトで判定する
Box Collider 2Dの追加
Physics 2D Raycasterからの光線と衝突したのを検知出来るようColliderを追加します。
Add Componentボタンをクリックし、Box Collider 2Dコンポーネントを追加しましょう。
設定はデフォルトのままでよいです。
Event Triggerによるクリック判定追加
Colliderが衝突を検知したときにイベントを発生出来るようEvent Triggerを追加します。
Add Componentボタンをクリックし、Event Triggerコンポーネントを追加。
「Add New Event Type」> 「PointerDown」を選択して下さい。
PointerDownの処理は後から追加するので、ここでは保留。
Double Clickスクリプトを追加
PointerDownで発生させる処理をスクリプトで書いていきます。
ダブルクリックされるオブジェクトにスクリプトを追加し、以下のようにコードを書きます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DoubleClick : MonoBehaviour
{
private int clickCount;
private bool flg;
void Start()
{
clickCount = 0;
flg = false;
}
public void OnClickDown()
{
clickCount++;
Invoke("OnDoubleClick", 0.3f);
}
private void OnDoubleClick()
{
if(clickCount != 2) {clickCount = 0; return;}
else {clickCount = 0;}
if(flg == false) {
gameObject.GetComponent<SpriteRenderer>().color = Color.red;
flg = true;
}
else
{
gameObject.GetComponent<SpriteRenderer>().color = Color.white;
flg = false;
}
}
}
OnClickDownメソッドはPointer Downに登録するメソッドです。OnClickDownが呼び出されたらclickCountをインクリメントします。そしてOnDoubleClickメソッドを0.3秒後に呼び出します。この時間はダブルクリックの時間間隔パラメータですので、適当に調整してもらって構いません。
OnClickDownが呼び出されたときにclickCountが2回のときにダブルクリックと判定し、処理を実行します。今回は、ダブルクリックされたときにオブジェクトの色を赤に変える処理を追加しました。
スクリプトが出来上がったのでPointer DownにOnClickDownメソッドを登録します。
以上でダブルクリック判定の出来上がり!
オブジェクトをダブルクリックしてみよう
ゲームを開始したときはオブジェクトは白です。
オブジェクトの上でダブルクリックすると
オブジェクトが赤色に!
まとめ
オブジェクトをダブルクリックしたときに色を変更するサンプルを作りながら、Event Triggerにダブルクリックを追加する方法を解説しました。
正直、Unityにダブルクリックを判定する機能が無いのが残念です。(私が知らないだけかもしれません)
今後機能が追加されることを期待します。
最後までお読み頂きありがとうございました。