セットアップが終わったのでUIを扱っていきたい!
Unity2018.4、MRTK2.2.0、Hololens1
サンプルシーン
ExampleのHandInteractionExampleシーンをビルドして動かした。
Holoens1でも動いた!
OpenKeyboardというボタンを押したら、システムのキーボードは表示されて動かせたけど、入力した文字が表示されなかった。
というかそもそも全部の文字が表示されてなかった気がする。
IOExceptionエラー
文字表示を治すために、UnityEditorに出ていた謎のウィンドウで何かをInstallしたら、文字は表示されるようになったけど、代わりにビルドできずにIOExceptionエラーが出た。
一旦以前ビルドしたフォルダを消したらうまくいった。
ちゃんと文字も表示された。けど日本語は表示されなかった。
□□になる。
フォントが対応していない?TextMeshだから?まあいいや
自分のシーンでuGUIを動かす
新しいシーンを作ったら、上のメニューのMixedRealityToolkit>Add to Scene Configureを押すと、シーンがセットされる
Canvas設定
Canvasを追加
Canvasに表示される「Convert to MRTK Canvas」を押すとCanvasUtilityスクリプトがつく
Add NearInteractionToucharableUnityUIを押す。なくてもいいのかな?
ここに説明が書いている気がする。
Near~ではPointerとTouchが選べる。
Hololens2のハンドトラッキング用の選択だと思われる。
今はHololens1で操作するのでPointerにした。
canvasのScaleは0.001ぐらい
uGUI
Canvasの設定が終わったらあとは普通にuGUIを置いたらすぐに使えた。
ただInputFieldをクリックしてもキーボードが自動で表示されることはなかった。Androidスマホとかだと勝手にOSのキーボードが出るんだけどな~
キーボード表示
サンプルシーンのSystemKeyboardExample.csによると、システムキーボードをスクリプトから表示するにはこんな感じらしい。
wmrKeyboardはMixedRealityKeyboard。
適当にこんな感じのコードを書いた
これでちゃんとキーボードが表示されて、InputFieldに入力できた!!!
キーボードは勝手に頭に追従した。
MixedRealityKeyboard.ShowKeyboardについてのリファレンスは下
追記:20200402
実際にはこういうスクリプトを適当なオブジェクトに付けて、InputFieldの下にButtonを置いて、そこのイベントからOnShowKeyboard()を呼び出してInputFieldを設置した。
UI追従
HololensにはOculusみたいな正面補正機能がないらしい。
じゃあ重要なUIはある程度BodyLockしたほうがいいかな。
MRTK1はtagalongというコンポーネントでできたらしいけど、MRTK2はSolverSystemになったそう
RadialViewを付けたらSolverHandlerも勝手についた。RadialViewがないと追従しないっぽい
TrackedTargetTypeはHead。Holo2だと手に追従とかもできるみたい。
動かしたら、なんとなくついてはくるけど、うまく視界に入ってついてきてくれない。
RadialViewのMaxViewDegreeを小さくすると常に視界の真ん中に入ってきてくれた。デフォルトは30だった。
あとBillboardもつけて向きも追従した
UIを常に手前に表示する
Hololensが自動でオクルージョンしてくるので、UIが物の陰に隠れるときがある。
常に手前にしたい。
Camera二つ作るしかないのか?
InputModuleのエラー
既存のシーンにMixedRealityToolkit>Add to Scene Configureをするとエラーが起きた。
For Mixed Reality Toolkit input to work properly, please remove your other input module(s) and add a MixedRealityInputModule to your main camera.
EventSystemに対して出てる。
シーンをMRTK用にセットしたらMainCameraに自動でMRTK用の?EventSystemがつくのでそれを使え!既存のEventSystemは消せという意味だと思う。