見出し画像

【Unity】UI同士の当たり判定についていい加減決着をつけようジャマイカ

どうも、マカロンです。
今回は簡単なのになぜか記事が見当たらない
UI同士の当たり判定について書いていきたいと思います。


お願い

この記事がもしお役に立てていたら
ぜび一度僕のアプリで遊んでいただけると非常に嬉しいです、、、

それではさっそくいきましょう!


UIの当たり判定のつけ方

結論から言うオブジェクトの時と同じように
Rigidbody2DとCollider2Dをつけてあげれば反応するようになります。

一つオブジェクトと違う点はtransformがRectTransformという事です。

それに伴って、Collider2DのSizeは
RectTransformのWidthとHeightの値に設定する必要があります。

     左 : Collider2D  |  右 : RectTransform

あとはコードでOnTriggerStay2Dとtagなどで当たり判定を取ればOKです!





当たり判定によって自動でButtonを押す

さて、当たり判定を検知することが出来るようになりましたが
UIにはボタンという概念が存在します。

ボタンは通常マウスか指でタップする用途で使われるので、UIを疑似マウスと見立ててこのボタンを押すにはもうひと手間必要になります。

Button button;
~
button.onClick.Invoke();

このようにボタンのonClickをInvoke()で呼び出すことによって自動で
ボタンを押したときの処理を実行できます。

これを先ほどのUIの当たり判定と組み合わせて

  if (Input.GetKey(KeyCode.Space))
  {
      if (button != null) button.onClick.Invoke();
  }
    private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.tag == "button")
        {
            button = collision.GetComponent<Button>();
        }
    }

"button"というタグを持つUIに重なった時、(Button)buttonを取得してきた
状態でSpaceキーを押すとonClick.Invoke()が発動してボタンが押された処理をキーボードからの入力のみで実現することが可能です。





PR





でもやっぱサンプルコード見せてくれないと…

unitypackageを提供します。

こちらにはサムネで使っているボタンに重なると赤くなるMouseUiと
ON/OFFテキスト、ボタンで今の解説した内容を検証することが可能です。

ON/OFFボタンに"button"というtagを設定する必要があるかもです。。
Mouse.csで当たり判定とボタンを押すサンプルコードが入っています。




最後に

少しでもお役に立てていたら幸いです。
ということで最後まで読んでいただきましてありがとうございました!
Twitterでゲーム作りの進捗を日々更新していますので
フォローお待ちしております^^

ではまた!


ゲームを作るにはやはりお金がないとできることが限られてしまいます。なのでよろしければどうか支援してくださるとうれしいです