今回はUnityのスタンダードアセットのUtilityにあるEventSystemCheckerを使ってみたいと思います。
EventSystemCheckerはUnityでUIのイベントを扱う時に必要になるEventSystemがゲーム中に存在しているかどうかを確認し、なければ追加するスクリプトです。
通常であればUIを追加した時に自動でEventSystemは追加されますが、誤って削除してしまう事もあります。
そんな時にEventSystemCheckerスクリプトを何らかのゲームオブジェクトに取り付けておくとEventSystemとStandaloneInputModuleをAwakeメソッドのタイミングで追加してくれます。
EventSystemCheckerの取り付け
ヒエラルキー上に空のゲームオブジェクトを作成し、EventSystemCheckerを取り付けます。
もちろん空のゲームオブジェクトを作る必要はなく、他のゲームオブジェクトに取り付けても問題ありません。
EventSystemCheckerはAssets→StandardAssets→Utilityにあります。
EventSystemがないとボタンはどう反応するのか?
まずはヒエラルキー上にUIのボタンを作成し、EventSystemを削除した場合にボタンの反応がどうなるかを見てみます。
ヒエラルキー上で右クリック→UI→Buttonを選択し、UIのボタンを作成します。
↑のように自動でEventSystemも配置されました。
ButtonのHighlighted Colorを赤色に変更します。
これでUnityを実行し、マウスポインタをボタンの上に持っていくと、
↑のようにボタンが赤色に変化し、ボタンが選択されている事がわかります。
ここで、ヒエラルキー上のEventSystemを削除して再度Unityを実行しボタン上にマウスポインタを持っていくと、
↑のようにボタンの色も変わらず、ボタンを押しても反応がありません。
このようにUIの操作をする時はEventSystemが必要になります。
EventSystemを消してEventSystemCheckerを試す
EventSystemを消した状態で空のゲームオブジェクトを作成し、名前をEventSystemCheckerとし、EventSystemCheckerスクリプトを取り付けます。
EventSystemという文字が出てきすぎ・・・・・(ーー;)
ヒエラルキーは、
↑のようになりEventSystemを削除した状態にします。
EventSystemCheckerゲームオブジェクトにはEventSystemCheckerスクリプトを取り付けた状態にします。
これでサンプルが出来上がったので、Unityを実行し、ヒエラルキー上にEventSystemが現れるか確認してみます。
↑のようになりました。
関係ないゲームオブジェクトがヒエラルキー上にいっぱい映っていますが・・・、これはブログ記事用(Utility系)の機能に使っているサンプルが表示されているだけなので、関係ありません。
EventSystemChecker自体はEventSystemが存在していない時に、追加するだけの機能なのでシンプルですが、あればいちいちEventSystemがあるかどうか気にしなくてもいいのでいいかも?