Mixed Reality 250の動かし方メモ
追記(2017/9/14)
Unity2017.2.0b11がリリースされ、HoloLensで動作しない問題が解消されているみたいなので、これから試す人はb11をゲットするのが良さそうです。
動きました…が,頭が足りません#WinMR #HoloLenshttps://t.co/HO6qnmuz8B
— デコ・シ@MR (@Ash_Yin) 2017年9月14日
はじめに
AcerのWindows Mixed Reality Headset が届いたのでHoloLensとの組み合わせを試してみようとチュートリアルをやってみました。
開発環境もベータ版で動かすのにいろいろ苦労したので、最終的な環境や手順について書いておきます。
注意
2017/9/5の時点で書いています。
今後のアップデートによってはこの記事の手順では動作しない可能性があります。
また、いろいろ試してみた結果なので、これ以外のバージョンでも動作する、この手順は実は不要だ、などなどあるかもしれません。
試してみたチュートリアル
HoloLensとImmersiveヘッドセット間のシェアリングコンテンツのチュートリアル。
デコ氏さんが翻訳記事を書いてくれています。(5章まであります)
開発環境
PCはRazer Blade(ラップトップ)で、OSはWindows10のInsider Previewにアップデートしました。
Insider Previewにする際、どのバージョン?を取得するかの選択では「次のバージョンのWindows」「ファースト」を選択しています。
VisualStudioのバージョンは15.2です。
Immersiveヘッドセットの開発にはUnity2017.2が必要で、現在ベータ版として提供されています。
ベータ版は現時点で2017.2.0b10までリリースされているのですが、b7以降ではHoloLensでの実機実行ができない問題があります。
そのため、b5とb8をインストールして、HoloLens向けにはb5、Immersive向けにはb8でビルドするようにしました。
ひとつのプロジェクトを複数バージョンで何度も切り替えるのが怖かったことと、後述するバージョン間でのコード修正のしやすさを考えて、それぞれプロジェクトを用意してGitで管理しています。
プロジェクトの準備
チュートリアルのはじめにプロジェクトファイル(.zip)を取得するためのリンクがあります。
チュートリアルはこのプロジェクトをベースに、シーンを作成してプレハブを配置していくことで進む形式となっています。
ただ、現在取得できるプロジェクトはb8向けにコードが修正されたバージョンであり、b5で開くとコンパイルエラーが発生します。
そのため、zipをダウンロードするのではなく、GitHubからプロジェクトをクローンすることにしました。
コミットログを見てみると「update to 2017.2b8」というログのコミットがあるので、ここでb8対応がされたことが分かります。
その直前の[485857f~]のハッシュのコミットまでプロジェクトを戻すと、b5で開いてもエラーが出ずHoloLens向けにビルドできるようになります。
ただ、コミットログをよく見るとb8対応のあとに「Fix null reference on HoloLens
」というコミットがあります。
これはHoloLens向けの修正っぽいので、b5向けに戻した[485857f~]のコミットから作成したブランチに対して、チェリーピックで修正を適用しました。
画像のようなツリーになります。
ここまでがプロジェクトの準備です。
HoloLens向けにはb5用ブランチから、Immersive向けにはmasterブランチから、それぞれチュートリアルの内容を進めていきます。
両方で同じ作業したくないので、b5用ブランチで進めてコミットし、それをmaster側にマージして進めました。(正確にはmaster直接ではなく、masterから作成したb8用ブランチに)
チュートリアルを動かすための修正
プロジェクトの準備ができたらそれぞれビルドして実機で起動することができます。
しかし、チュートリアルを最後まで進めただけでは正しくコンテンツが動作しなかったため、いくつか修正した点があります。
CapabilitiesのInternetClientの追加
チュートリアルの準備のところに書いてありますが、UNETが使われているためUDP通信ができる状態にする必要があります。
はじめ試したときに接続がうまくいかず、UDPでの接続実験などいろいろ試して、翌日にCapabilitiesにInternetClientを追加したら接続成功しました。
ただ、これは本来必要なさそうな気がするので、たまたまそのタイミングでうまくいっただけで、自分のネットワーク環境によるものかもしれません。
カメラのNear/FarClip設定
Immersiveで起動すると、遠景が切れたような不自然な表示になっていました。
CameraのClip設定が効かない不具合があるようで、それが原因だと思います。
以下の記事で回避方法が紹介されていたので、参考にさせていただきました。
XVI Inc. | Immersiveヘッドセット向けアプリ開発落とし穴集 (Unity 2017.2.0b10)
※現在はb10向けに記事が更新されていていました。b10ではFarClipのほうは修正されているようですね。
LevelControlコンポーネントの設定
実はチュートリアルのプロジェクトには各章ごとのシーンも含まれていて、完成版のシーンを確認することができます。(AppPrefabs/Support/ChapterScenes/Chapter5_Collaboration_Finale.unity)
チュートリアルに沿って自分で作成したシーンと完成版のシーンを比べると、UslandオブジェクトのLevelControlコンポーネントの設定が異なっていることに気づきました。
完成版に合わせて以下の変更をしました。
・"Parent Object"がNoneになっているのでUslandの子であるMixedRealityLandを設定
・"GiantAvatar"がPlayerAvatarになっているのをGiantCloudsプレハブに変更
完成
以上の対応をしたところ、実機で正しく動作しているであろうところまで確認。HoloLens x 2、Immersive x 1の計3台でのシェアリングに成功し、コンテンツも最後までプレイして最初に戻り再プレイができました。
ここまで対応したリポジトリを以下に公開してます。"2017.2b5"ブランチがHoloLens向け、"2017.2b8"ブランチがImmersive向けです。
おわりに
InsiderPreviewの正式リリースやUnityベータのアップデートにより状況は刻々と変わっていくと思いますが、今このタイミングで試そうとしている人にとって、少しでも参考になれば幸いです。