LoginSignup
39
34

More than 5 years have passed since last update.

Unity(3D・2D) EventSystemでクリックイベントの制御

Last updated at Posted at 2017-10-23

クリックなどのイベント

Unityでオブジェクトのクリックイベントなどは、Rayを飛ばす方法が一般的のようですが、EventSystemを使うともう少し簡単に書けるのでその方法です。
内部ではRaycasterでRayを飛ばしてるみたいですが、そこを意識しないでも使えるのがいいかなと。
Unityは初心者なので備忘録も兼ねて書きます。

1.カメラにRaycasterをアタッチ

カメラオブジェクトのInspectorから、AddComponentをクリックして、Physics Raycasterをアタッチします。
後述するコライダーが2DのときはPhysics 2D Raycasterの方をアタッチします。

2.EventSystemをシーンに配置する

シーン内に UI→EventSystemを配置します。

3.クリックされるオブジェクトにコライダーをアタッチ

スプライトやキューブなど、クリックしたいオブジェクトのInspectorにBox Colliderなどのコライダー(当たり判定)をアタッチします。2D/3Dは用途に合わせて。

4.クリックされるオブジェクトにEventTriggerをアタッチ

Inspectorから、Event→EventTriggerをアタッチします。

5.イベントを受け取る方のオブジェクトに処理を記述

InspectorのEventTriggerの、「Add New Event Type」から、使いたいイベントを選びます。
例えばマウスクリックを拾いたいのであれば「PointerClick」を選択。
すると、Pointer Click(BaseEventData)とでるので、その下の枠にイベントを受け取るオブジェクトを選択し、イベントを受け取る処理が記述されたメソッドを指定します。

NoName_2017-10-23_17-40-59_No-00.png

上の例だと、クリックされた時、Hierarchy上のActManager(Managerクラスのスクリプトがアタッチされている)というオブジェクトの、OnSortiePointClickというメソッドが実行されます。

ActManagerのスクリプトはこんな感じ

Manager.cs
using UnityEngine.EventSystems;

public class Manager : MonoBehaviour
{
    public void OnSortiePointClick(BaseEventData data){
        var eventData = (PointerEventData)data;
        //処理...
    }
}

もう一つの方法

アタッチしたスクリプトにイベントハンドラのインターフェースを実装する

上の例だと、インスペクターにイベントを受け取るゲームオブジェクトをアタッチしていましたが、この方法だとPrefabのようなまだオブジェクト化してないときに困ります。
もう一つの方法としては、アタッチしたスクリプトにIPointerClickHandlerなどを実装する方法です。

using UnityEngine.EventSystem;

// IPointerClickHandlerインターフェースを継承して OnPointerClickを実装
public class Hogehoge : MonoBehaviour, IPointerClickHandler {
    // Start, Updateは省略

    public void OnPointerClick(PointerEventData data){
        // クリック時の処理
    }
}

どちらを使うかは状況に応じて変えるとよいでしょう。
どのインターフェースがどのイベントに対応しているかは、下記のその他欄の一覧からどうぞ。

その他

39
34
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
34