前回記事の続きとなります。追加した表示UIのボタンにイベントの設定を行います。
・hololensで画面UIを表示する
http://bluebirdofoz.hatenablog.com/entry/2017/04/28/021154
やはりUIの表示だけでなく、ボタン操作のINPUTの仕組みも確認しておきたいということです。
まずUnityのButtonオブジェクトに関する勉強になります。以下の記事を参考にしました。
・【uGUI】Buttonの使い方
http://qiita.com/2dgames_jp/items/b3d7d204895d67742d0c
丁寧な記事です。Buttonオブジェクトに関する様々な情報があります。
折角なので色変更などの設定も行ってみます。
Navigationの設定についてはhololensで使う場合「none」でいいでしょう。
ついでにテキストも変更します。
最後にイベントの設定です。
ユニティちゃんオブジェクトを指定して現在、ゲーム開始時に呼ばれているOnSelect関数を設定します。
アプリをビルドして試してみます。
ボタンに視点を合わせてエアタップ動作を行うと…。
ボタンが赤に変わり、ゲームが開始しました。成功です。
随分とあっさりと成功してしまいました。
しかし、この裏にはUnityのEventSystemの自動設定とhololens Input Moduleの設定がありました。
仕組みが分からないままでは意味がないので少し調べてみます。
そもそもCanvasオブジェクトを作成した際に自動生成されたEventSystemオブジェクトとは何なのでしょう。
・UnityのEventSystemを操る
http://chungames.hateblo.jp/entry/2015/11/21/234241
・Unity 4.6 から利用できる UI での EventSystem をカスタムする方法について調べてみた
http://tips.hecomi.com/entry/2014/09/25/233823
・イベントシステム
https://docs.unity3d.com/jp/540/Manual/EventSystem.html
順に読めば何となく理解できるかも?
EventSystemオブジェクトは Unity 4.6 から導入されたシステムで uGUI を利用する際は必ず追加されるオブジェクトです。
EventSystemにデフォルトで導入されたscriptはそれぞれ下記の役割を持ちます。
- Event System:どの Input Module が現在有効なのか、どのゲームオブジェクトが現在選択されているかを管理する。
・Event System マネージャー
https://docs.unity3d.com/ja/540/Manual/script-EventSystem.html
- Standalone Input Module:コントローラー/マウスの入力を管理する
・Standalone Input Module
https://docs.unity3d.com/ja/540/Manual/script-StandaloneInputModule.html
これらのEventSystemとCanvasオブジェクトがどういった関係で結ばれているかというとRaycasterと呼ばれる仕組みです。
例えばCanvasオブジェクトを生成すると、必ずGraphic Raycasterコンポーネントが追加されています。
EventSystemは検知した操作についてRaycastという通知を行います。
そしてCanvasオブジェクトはこのRaycasterを通じてそのRaycast通知を受け取ります。
これによって、GUIにコライダ(アタリ判定)を付けなくてもマウス操作などが可能になる訳です。なーる。
前回、EventSystemにHoloLens Input Moduleを追加したのは視線操作とエアタップ操作によるRaycast通知を追加した訳ですね。
表示UIとそれに対する操作はここで閉じている訳です。賢い。
MVP設計に落とし込む際にはGUI操作関連の処理は一纏めにViewと考えた方が良いのかな。