オブジェクトをクリックしたときに処理を発生させる
はじめに
脱出ゲームなんかを作っていると、オブジェクトをクリックするとイベントが発生するみたいな処理が必要になります。 忘れるので、やり方をメモっときます。
例えば、下の画像のPCをクリックすると、何かイベントが発生するようにしたいとします。
オブジェクトにコライダーをつける
オブジェクトにコライダーをアタッチします。
CameraにPhisics RayCasterをアタッチ
クリックしたときにイベントが発生するようにScriptを作成
スクリプトはoobaさんの記事のやつを参考にさせていただく。
public class ZoomButton :SetUpButtonAbst { public override void PushButtonClickAction() { Debug.Log("Pushed"); } public override void PushButtonDownAction() { // throw new System.NotImplementedException(); } public override void PushButtonUpAction() { //throw new System.NotImplementedException(); } internal override void ButtonSetUp() { } }
[RequireComponent(typeof(CustomButton))] public abstract class SetUpButtonAbst : MonoBehaviour { public abstract void PushButtonClickAction(); public abstract void PushButtonDownAction(); public abstract void PushButtonUpAction(); internal abstract void ButtonSetUp(); }
public class CustomButton : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler { public System.Action onClickCallback; SetUpButtonAbst _setupButton; // タップ public void OnPointerClick(PointerEventData eventData) { onClickCallback.Invoke(); } // タップダウン public void OnPointerDown(PointerEventData eventData) { _setupButton.PushButtonDownAction(); } // タップアップ public void OnPointerUp(PointerEventData eventData) { _setupButton.PushButtonUpAction(); } private void Start() { _setupButton = GetComponent<SetUpButtonAbst>(); if (_setupButton != null) { this.onClickCallback = () => { _setupButton.PushButtonClickAction(); }; } } }
ZoomButtonスクリプトをオブジェクトにアタッチする
クリックするとPushedとでたのでOK