Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
30
Help us understand the problem. What is going on with this article?
@Tachibana446

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

More than 3 years have passed since last update.

クリックなどのイベント

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){
        // クリック時の処理
    }
}

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

その他

30
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
30
Help us understand the problem. What is going on with this article?