【Unity】UIのイベントが発生しない件

こんにちは。ぶんじゃくです。

さて、Unity界隈はざわついております。

ざわついておりますし、私自身思うことはありますが、そんな話をしていてもしかたがありませんので、今回は

「UIのイベントが発生しない件」

というタイトルで執筆してみたいと思います。

「何のこと?」

と思われる方もいるかもしれません。

例えば、単純にボタンを用意するUnityのチュートリアルをこなすだけならば、

ボタンを押したときに発生する処理をスクリプトに記載して処理させる、なんてことは簡単だと思います。

ところが、開発が進みたくさんのUIを用意していくと、たまにこの問題に当たってしまうことがあります。

「ボタンを押してもイベントが発生せず、スクリプトが走らない…」

というようなことです。

私の場合、ということで、これの解決方法についてお話していきたいと思います。


そのUIの上のレイヤーに別のUIが存在しないか

個人的によくある第一位はこれです。

「いやいや、見えているから別のUIなんてないよ!」

と思っても、実はあることがあります。

例えば、画面全体を覆うフェードイン・フェードアウトなどを行うUIのアルファ値が0になっていて、見えてはいるけど覆いかぶさっているケース。

例えば、別のUIの透過部分が該当のUIにかかってしまっているケース。

他にもいろいろとありますが、そういうことはないか確認してみましょう。

確認する方法ですが、EventSystemをインスペクターで見ると、(だいたいですが)右下のデバッグ表示で確認できます。

「Current Raycast」を見ると、「今どのUIがマウスで操作できるのか」を確認できます。

ここで他のUIの情報が出るようなら、上記のケースに該当するということですので、GameObjectの配置等見直してみましょう。

EventSystemがない

これもありがちなことです。

EventSystemはUIを作る際、Canvas GameObjectが作られるのと同時に必ず作られます。

なのでこれがない、というケースはあまりないかのように思いますが、シーンまたぎのUI GameObjectを作っている場合、

移行した先のシーンでEvent Systemがないということがあり得ます。

なので、これもUIを使いたいシーンでは必ずEvent Systemを追加することを忘れないようにしましょう。

Raycast TargetがOFF(あるいはON)になっている

Raycast TargetがOFFのUIはマウスで操作できないようになっています。

なので、単純にこれがOFFになっていることがあります。

通常自動でONになるのですが、スクリプト等から任意でON/OFFしている場合、この点注意しましょう。

これもEvent SystemのインスペクターとUI自身のインスペクターのRaycast Targetで確認可能です。


さて、いかがだったでしょうか。

これ以外にも考えられる原因はありますが、だいたい

Event Systemを確認、UI GameObjectのRaycast Targetを確認、すると、あっとなることがあります。

便利な機能はそろっていますので、ぜひ確認してみてください。

それでは今回はこの辺で。

さようなら。