Unity 2D オブジェクトをタッチしてイベントを発生させる方法


0.0 はじめに

オブジェクトをタッチまたはクリックしてイベントを発生させる方法をまとめました。
ゲーム中にキャラクタやオブジェクトをタッチして操作する際にとても便利です。

準備として何でもよいので、まずは可視出来るオブジェクトを1つ作ってください。

何もなければ、下の手順でオブジェクトが作れます。
1. 下記の青い四角を右クリック、"名前を付けて画像を保存"してください。名前は何でもよいです(例:Square.png)
2. 保存した画像をUnityのProjectウインドウ内のAssetフォルダに入れてください(ドラッグ&ドロップ)。
3. そしてこの画像をそのままHierarchyへ入れてください(ドラッグ&ドロップ)。

1.0 Event Systemオブジェクトを追加する

Hierarchyの中にEvent System(イベントシステム)を追加します。忘れがちなので最初にやりましょう。
Event Systemはタッチやクリックなどのユーザー入力を監視しイベントを伝える役割を果たします。

👍ポイント
Event SystemはUIを作成した際に自動的にできます。1つあれば十分なので、すでにEvent SystemがHierarchyの中にあるのであれば追加する必要はありません。
HierarchyのCreateから UI -> Event Systemの順で選んで追加します。

2.0 Physics 2D Raycasterコンポーネントをカメラオブジェクトに追加する

カメラにPhysics 2D Raycasterコンポーネントを追加します。こちらも忘れがちなので最初にやりましょう。
たいていの場合、シーンにMain Cameraがあると思います(シーンの初期設定でHierarchyの中にMain Cameraが作られています)。このカメラにRaycastコンポーネントを追加します。

👍ポイント
Raycast(レイキャスト)とは、ある地点から特定方向へ発射された光線(Ray)のようなもので、そのRayと衝突したオブジェクトの情報を入手することができる機能です。今回はこのRaycastの機能を使ってタッチしたところにあるオブジェクトの情報を入手します。

HierarchyでMain Cameraを選択します。そしてAdd Componentをクリックして、検索窓にてPhysics 2D Raycasterを検索して選びます。ray と入力すると予測が出てきます。 Physics Raycasterも出ますが2Dの場合はPhysics 2D Raycasterの方を選んでください。

3.0 Event Triggerコンポーネントの追加

タッチするオブジェクトを選択して、Add ComponentでEvent Triggerを追加します。Add ComponentボタンはInspector(インスペクター)の一番下にあります。 

検索の窓でEvent Triggerを探します。(Eと入力すると入力予測でEvent Triggerがすぐ下に出てきます。)

これでEvent Triggerコンポーネントが追加できました。

Add New Event Typeをクリックするとイベントが選べます。

↓は Pointer Down を選んだ場合

ここへ呼び出す関数を登録します。詳しくは6.0 呼び出し関数の登録を参考にしてください。

4.0 Colliderの追加

タッチさせたいオブジェクトにコライダー追加にコライダーを追加しましょう。下の図はBox Colliderを追加したところ。

👍ポイント
コライダーはBox ColliderやCircle Colliderなど数種類あります。オブジェクトの形やタッチをしたい領域に合わせて選びましょう。
2Dの場合はBox Collider 2Dのように2Dと名前が付いたものを選びましょう。

5.0 スクリプトを作成

タッチしたときの動作が書かれたスクリプトを作成します。
今回は下のようなSquare.csというスクリプトを作成してオブジェクト(ここではSquareオブジェクト)にアタッチ(貼り付け)しましょう。

Square.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Square : MonoBehaviour
{
    // タッチされた時に呼ばれる関数
    public void OnTouched() {
        Debug.Log("オブジェクトがタッチされました!!");
    }
}


6.0 呼び出し関数の登録

  1. 右下の+を押して呼び出し関数の登録画面を作ります。
  2. スクリプトがアタッチされたオブジェクトを"None(Object)"となっている枠に入れます(ドラッグ&ドロップします)。
  3. "No Function"と書かれたバーをクリックしてスクリプト名、関数名を選びます。

👍ポイント
目的の関数が見つからないときは、
スクリプトが正しくアタッチされているか?
関数のアクセス修飾子がpublicになっているか?
を確認してみてください。

7.0 おわりに

コンソール画面に正しく表示されたら成功です。