あるGameObjectをクリックしたときに、何か処理をしたい場合に使えるEventSystemとIPointerClickHandlerについて書きます。
#まずEventSystemとは。
EventSystemとは、
キーボード、マウス、タッチやカスタムの入力に基づいて、アプリケーション内のオブジェクトにイベントを送信する方法
です。(Unityマニュアルより)。
つまり、EventSystemを使えば、あるオブジェクトがクリックされたりした時に、そのオブジェクトにイベントを送ることができるということです。
この中で、この記事では ”IPointerClickHandler"を用いて、クリックされたオブジェクトにイベントを送信する方法について述べます。
IPointerClickHandlerを使うタイミングとは、UIではないオブジェクトに対してイベントを飛ばすときです。
UIの一つであるButtonなどに対しては関数とButtonをそのまま対応させることができますが、UIでないゲームオブジェクトに対して「それがクリックされた時に〇〇する」という処理をするためには
「EventSystemが該当シーンに存在すること(クリックを完治するため)」
「PhysicalRaycasterがカメラにアタッチされていること(UIでないGameObjectに対して、どれがクリックされているのかを判別するため)」
が必要です。
それでは、実際にどのように使うのかをみてみましょう。
using UnityEngine;
using UnityEngine.EventSystems;
public class qiita : MonoBehaviour, IPointerClickHandler{
private PieceInfo _pieceInfo;
void Awake(){
_pieceInfo = GetComponent<PieceInfo>();
}
//クリックされたオブジェクトに対して実行している。
public void OnPointerClick(PointerEventData eventData){
Debug.Lig(name + "がクリックされた");
}
}
このようにすることで、実際にクリックされたGameObjectの名前をコンソールに表示することができます。
「クリックされたら〇〇する」という処理をしたい時にぜひお使いください。