Unity
playmaker

Unity PlayMakerでマウスクリック系システムイベントを受け取る(System EventsとUI Eventsの違いって?


いきなり結論


  • System EventsのMOUSE UPなどのマウス系イベントを受け取るには、何らかのコライダが必要

  • UI EventsのUI CLICKを受け取るにはButtonコンポーネントが必要(これ公式に書いてあった)


Sent when a Button is pressed. Game object needs a Button component.

(公式ヘルプEventsより引用)


(ユーザーイベントを用意してInput系アクションでSend Eventする方法はここでは省略します)


はじめに(きっかけ)

2Dゲームで(こんなの)「ボタン押下」と「画面内マウスクリックでメッセージ送り」の両方をやるときに、System Eventsの「MOUSE UP」とUI Eventsの「UI CLICK」のどちらを使えばよいのかわからなかったので、調査・実験してみた。


前提情報


  • Unity 2018.3.0f2

  • PlayMaker 1.9.0.p5


試したこと


①2DでButton

2DプロジェクトでButtonオブジェクトに「MOUSE UP」「UI CLICK」イベントが届いたらDebug Log出力するFSMをやってみた。

スクショ.jpg

→ ボタンクリック時に「UI CLICK」イベントのみ届いた。


え?「MOUSE UP」は届かないの?



②2DでSprite

2DプロジェクトでSpriteオブジェクトに「MOUSE UP」「UI CLICK」イベントが届いたらDebug Log出力するFSMを(ry

→ クリックしてもどちらのイベントも届かなかった。


「UI CLICK」が届かないのはわかるけど「MOUSE UP」も届かない?

じゃあ「MOUSE UP」はどうやったら届くの??



③3DでCube

3DプロジェクトでCubeオブジェクトに「MOUSE UP」「UI CLICK」イベントが届いたらDebug Log出力(ry

→ クリック時に「MOUSE UP」イベントのみ届いた。


「MOUSE UP」届いた!じゃあ「MOUSE UP」が届く条件って?



④3DでCube(Box Collider無効)

3DプロジェクトでCubeオブジェクトの「Box Collider」コンポーネントのチェックボックスを外して無効にした状態で、「MOUSE UP」「UI CLICK」イベントが届いたらDebug Log出力(ry

→ クリックしてもどちらのイベントも届かなかった!


つまり、「MOUSE UP」に必要なのはコライダ!



⑤2DでSprite(Box Collider 2D追加)

2DプロジェクトでSpriteオブジェクトに「Box Collider 2D」コンポーネントを追加した状態で、「MOUSE UP」「UI CLICK」イベントが届いたらDebug Log出力するFSMを(ry

→ クリック時に「MOUSE UP」イベントが届いた!やったー!


おわりに

すみません、これがQiitaデビューです。

もし、記事の内容に間違いや修正すべき点などありましたら、優しく教えていただければ修正していきたいと思います。

取り急ぎざっと書いてみたので、あとで手を入れるかもしれません。

自分用備忘録として書いた部分もありますが、参考になれば幸いです。

ポエムでしたらすみません。