Text等のObjectをクリックした時にコードを実行する、あるいはクリックされたObjectの情報を取得する方法(今のところ2Dのみ)
前提:オブジェクト(あるいは動的生成したプレハブなど)にスクリプトがアタッチされていること
###IpointClickHandlerの実装
マウスクリックを受け取るために、アタッチしたスクリプトにはインターフェースIPointerClickHandlerを実装する。以下は簡単な実装例。MonoBehaviourの他にIPointClickHandlerを継承している点に注意する。
sample01.cs
using System.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
public class Clicktest : MonoBehaviour,IPointerClickHandler
{
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("クリックされたら表示する");
}
}
ここで、クリックされたらObjectの情報を変更する方法を考えてみる。(以下は、シーンビューに配置済みのUI.Textをクリックした数だけカウントアップする)
sample02.cs
using System.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI; //UI.Textのために必要
public class Clicktest : MonoBehaviour,IPointerClickHandler
{
Text ClickedTextObject;
public void OnPointerClick(PointerEventData eventData)
{
//eventData.pointerPressメンバから
//どのTextObjectがクリックされたか受け取る
ClickedTextObject =
eventData.pointerPress.GetComponent<Text>();
int temp = int.Parse(ClickedTextObject.text);
temp++;
ClickedTextObject.text = temp.ToString();
}
}
}
コツは、PointerEventDataのメンバ変数をうまく使うこと。
リファレンスを見るとlastPressでもいけそうなものだが、この場合はNullになってしまう。謎。