こんにちは、ともくんのゲーム作り部屋にようこそ!
このページでは、
「UnityのEventTriggerってなに?」
「EventTriggerってどうやって使うの?」
というお悩みの方に向けた内容となっています。
Unityでは、オブジェクトやUI要素をマウスでクリックしたりドラッグしたりした際に、何かしらの処理を行いたい場合に、EventTriggerが便利に活用できます。
このEventTriggerは、発生させたいイベントを追加・登録できるコンポーネントで、ユーザーからの指定した入力をトリガーとして、設定した処理を実行してくれる機能です。
EventTriggerには、マウスによるクリックやカーソルの移動、ドラッグ操作、ホイール操作から一部のキー操作などをトリガーとしたイベントを追加することができます。
そこで、このページでは、UnityのEventTriggerコンポーネントについて、どんな仕組みや機能なのか、また使い方までをまとめていきます。
EventTriggerとは?発生したいイベントを追加できるコンポーネント
EventTriggerは、オブジェクトやUIに対して、ユーザーからの入力によって発生させたいイベントを追加できるコンポーネントになっています。
例えば、ゲーム内に配置したオブジェクトをマウスでクリックしたら動き出す、などのようなイベント処理をEventTriggerで作ることができます。
このEventTriggerの仕組みとして、まずトリガーとなるクリックなどのユーザーからの入力情報を「EventSystem」というオブジェクトで受け取ります。
そして、このEventSystemからEventTriggerに向けて、イベントが発生したことが送信されます。
すると、EventTriggerの中でその発生したトリガーに紐づけていた処理が実行されることになります。

このように、EventTriggerではユーザーからの様々な入力に応じたイベントを設定し、実行できる機能になっています。
EventTriggerの使い方
ここからは、EventTriggerの使い方について紹介していきます。
例として、以下のオブジェクトを配置して、青色のオブジェクトをクリックしたら、赤色のオブジェクトが消える、という処理をEventTriggerで作っていきます。

EventTriggerを使う際の準備
まず、EventTriggerを使用する際の準備として、
- 「EventSystem」の配置
- 「Collider」のアタッチ(UI以外のオブジェクトに設定する場合)
- カメラに「Raycaster」のアタッチ(UI以外のオブジェクトに設定する場合)
が、必要となってきます。
EventSystemの配置
前述の通り、EventSystemはユーザーからの入力を受け取り、EventTriggerにイベントを送信する役割を持っているので、シーン内に必ず1つ設置する必要があります。
EventSystemを設置する場合は、ヒエラルキーウィンドウの+ボタンから「UI」の中にある「Event System」をクリックして追加することができます。

このEventSystemは1つ設置されていれば、基本的には問題ありません。
なお、UIなどの設置をしている場合は、自動的にEventSystemが追加されているため、確認しておきましょう。
Colliderのアタッチ(UI以外のオブジェクト)
UI以外のオブジェクトをイベントトリガーの対象とする場合は、そのオブジェクトに対してColliderコンポーネントをアタッチしておく必要があります。
UI要素のオブジェクトはそのままで問題ありませんが、通常のオブジェクトは、当たり判定の範囲を指定する必要があるため、そのままではイベントを発生させることができません。
そのため、イベントのトリガーとなる対象がオブジェクトの場合は、そのオブジェクトにColliderコンポーネントをアタッチしておきましょう。
今回は、トリガーとなるマウスでクリックする青色のオブジェクトに、「Box Collider」のコンポーネントをアタッチしています。

カメラにRaycasterのアタッチ(UI以外のオブジェクト)
UI以外のオブジェクトを対象とする場合は、カメラオブジェクトに対してRaycasterコンポーネントをアタッチしておく必要があります。
このRaycasterコンポーネントは、クリックした場所などから画面の奥に向かって光線を飛ばして、当たり判定のあるオブジェクトを探してくれることで、どのオブジェクトをクリックしたかなどを取得することができます。
Raycasterコンポーネントをアタッチする場合は、カメラオブジェクトを選択して、インスペクターウィンドウの「Add Component」から「Event」の中にある「Physics Raycaster」、2Dの場合は「Physics 2D Raycaster」を選択してあげます。

なお、対象がUIの場合は、「Graphic Raycaster」が親オブジェクトのCanvasにアタッチしているため、特に設定を行う必要はありません。

EventTriggerコンポーネントを追加する
次に、そのイベントのトリガーとなるオブジェクトやUIに対して、EventTriggerコンポーネントを追加していきます。
対象となるオブジェクトやUIを選択して、インスペクターウィンドウの「Add Component」から「Event」の中にある「EventTrigger」を選択することで、EventTriggerコンポーネントを追加することができます。

今回は青色のオブジェクトに対して、クリックした際の処理を作りたいので、青色のオブジェクトにEventTriggerコンポーネントをアタッチしています。
イベント発生時の処理を作る
EventTriggerをアタッチできたら、今度はイベントが発生した際の処理をメソッドで作成していきます。
ここで作成したメソッドを後ほど、EventTriggerに設定していくことになります。
今回は、イベントが発生したら赤色のオブジェクトを削除する処理を行いたいので、赤色のオブジェクトに対して、以下のスクリプトをアタッチしています。
using UnityEngine;
public class Test : MonoBehaviour
{
public void BlueClicked()
{
Destroy(this.gameObject); // 消去する処理
}
}
5行目で作成した「BlueClicked」というメソッドで、青色のオブジェクトをクリックした際の処理を記述していて、中で自身のオブジェクトを消去する処理を書いています。
なお、このメソッドは外部からアクセスすることになるため、頭にpublic修飾子を付けておきます。
イベントを追加してメソッドを紐づける
最後に、EventTriggerにイベントを追加して、トリガーが発火したら処理が行われるように設定していきます。
EventTriggerコンポーネントの「Add New Event Type」をクリックすると、様々なイベントの種類が表示されますが、今回は、オブジェクトをマウスでクリックした際の処理を行いたいので、「PointerDown」を選択します。

次に、+ボタンを押して、「None(Object)」と書かれている部分に、行いたい処理をアタッチしたいオブジェクトを選択します。
ここでは、赤色のオブジェクトを設定しています。

そして、右側の「No Function」と書かれている部分を選択して、先ほど作成したスクリプト名の中から「BlueClicked」のメソッドを見つけて選ぶことで、イベントにより行われる処理を実装できます。

これで実際にゲームを実行してみると、

青色のオブジェクトをクリックすると、赤色のオブジェクトが削除されているのが分かります。
EventTriggerの種類
EventTriggerでは、クリック以外にも様々なイベントの種類を指定することができます。

ここでは、EventTriggerの種類について、
- マウスのカーソル操作によるイベント
- マウスのクリック操作によるイベント
- マウスのドラッグ操作によるイベント
- マウスのホイール操作によるイベント
- 選択できるものを使ったイベント
の5つに分けて、ざっくりとどんなものかを紹介していきます。
なお、マウスのクリックやドラッグ操作に関しては、基本的にスマホのタップ操作でもイベントが発生するようになっています。
マウスのカーソル操作によるイベント
オブジェクトなどにマウスカーソルを合わせた時に、処理を実行してくれるイベントとして、以下の2つがあります。
- PointerEnter ⇒ マウスカーソルが対象に触れたら実行される
- PointerExit ⇒ マウスカーソルが対象に触れている状態から離れたら実行される
これらのイベントを使うことで、以下のようにオブジェクトにマウスを合わせた時に色が変化して、離れたときに元の色に戻すという処理を作ることができます。

マウスのクリック操作によるイベント
オブジェクトなどをマウスでクリックした時に、処理を実行してくれるイベントとして、以下の3つがあります。
- PointerDown ⇒ マウスで対象をクリックしたら実行される
- PointerUp ⇒ マウスで対象をクリックして、離したら実行される
- PointerClick ⇒ マウスで対象をクリックをして、対象の上で離したら実行される
PointerUpとPointerClickは同じようですが、PointerUpはクリックした場所が対象の上であればどこで離しても発生しますが、PointerClickはクリックした場所も離した場所もどちらも対象の上である必要があります。
例えば、マウスでクリックしたら回転処理を行い、その場で離したら回転は止まり、別の場所で離したら逆回転するという処理を作ることができます。

マウスのドラッグ操作によるイベント
オブジェクトなどをマウスでドラッグやドロップした時に、処理を実行してくれるイベントとして、以下の5つがあります。
- Drag ⇒ マウスで対象をドラッグしている間は実行される
- Drop ⇒ マウスでドラッグした状態で、対象の上でドロップしたら実行される
- InitializePotentialDrag ⇒ マウスでドラッグできる対象をクリックしたら実行される
- BeginDrag ⇒ マウスで対象をドラッグし始めたら実行される
- EndDrag ⇒ マウスで対象をドラッグしてドロップしたら実行される
これらのイベントを組み合わせて使うことで、例えば、以下のようにオブジェクトをドラッグしている間は色が変更して、自由な場所に移動できるような処理を作ることができます。

マウスのホイール操作によるイベント
オブジェクトなどに対してマウスホイールを回転する処理を行った時に、処理を実行してくれるイベントで、「Scroll」で指定することができます。
ホイールをどちらに回しているかどうかはこのイベントでは検知しないので、イベント処理の中でGetAxisメソッドなどを使ってホイールの変化量を取得することで、以下のようにホイールの回転に合わせて、オブジェクトも回転させるといった処理を作ることができます。

選択できるものを使ったイベント
選択できるオブジェクトやUIなどで操作を行った時に、処理を実行してくれるイベントとして、以下の6つがあります。
- UpdateSelected ⇒ 対象を選択された状態の間は実行される
- Select ⇒ 対象を選択したら実行される
- Deselect ⇒ 対象の選択を解除したら実行される
- Move ⇒ 対象を選択して上下左右のキー操作による移動が行われた場合(WASDや矢印キー)
- Submit ⇒ 対象を選択してエンターキーが押された場合
- Cancel ⇒ 対象を選択した状態でEscキーが押された場合
これらのイベントを使う際は、その対象が選択できるものである必要があります。
そのため、オブジェクトで使う場合には、Selectableコンポーネントなどで選択できる状態にしておく必要があります。
例えば、以下のようにSelectableコンポーネントで配置したオブジェクトに、これらのイベントを使用することで、選択する操作に合わせてオブジェクトの色を変更したりする処理を行うことができます。

まとめ
このページでは、UnityのEventTriggerについて、どんなコンポーネントなのか、また使い方や種類についてまとめていきましたが、いかがでしたでしょうか?
EventTriggerコンポーネントは、オブジェクトやUIに対して、イベントを追加することができる役割を持っています。
EventTriggerを使うことで、オブジェクトをクリックやドラッグした時にトリガーを発火して、それに応じてゲーム内で様々な処理を実装することができます。
また、EventTriggerを使う場合には、EventSystemは必ず必要で、UI以外のオブジェクトの場合は、ColliderやRaycasterを付けておく必要があるので、注意しておきましょう。
最後までお読みいただきまして、ありがとうございました!
コメント