$30 off During Our Annual Pro Sale. View Details »

第6回 HoloLens 参考書読書会 アンカー編

第6回 HoloLens 参考書読書会 アンカー編

この資料は第6回 HoloLens 参考書読書会で使用したスライドの一部です。

Kenta Iwasaki

March 29, 2018
Tweet

More Decks by Kenta Iwasaki

Other Decks in Programming

Transcript

  1. 第6回 HoloLens参考書 読書会
    World Anchorについて
    3月28日 イワケン

    View Slide

  2. 2/58
    自己紹介
    •岩崎謙汰 (イワケン) 1993年生まれ
    •東京工業大学 大学院卒業 4月から社会人
    •研究分野: グラフサンプリング
    •趣味: Unity、AR×〇〇を考える、Vtuber
    •HoloLens実績
    • めざせスカウター! HoloLensによる
    特定個人の 顔認識アプリ制作と
    その課題 (ABCSpring 2017)
    • XR HACKATHON、決勝進出
    • 学生ハッカソン、企業賞

    View Slide

  3. 3/58
    今日扱う内容
    •書籍 第7章 “The Tools of the Trade”
    • Persistence (永続性)
    • World Anchors
    • ゲーム内のデバッグWindow

    View Slide

  4. 4/58
    今回のゴール
    •World AnchorとPersistence (永続性) の意味を
    理解する
    •World AnchorのUnity上の使い方を学ぶ
    •書籍の流れを確認する
    アンカーとは「いかり」のこと。
    イメージで覚えておこう!



    View Slide

  5. 5/58
    今回の環境
    Unity 2017.1.0f3
    Visual Studio 2017 13.0.1
    HoloToolkit-Unity v1.2017.1.0
    Parallels Desktop13
    for Mac Pro Edition
    13.2.0

    View Slide

  6. 6/58
    Persistence (永続性)
    とは何か理解しよう

    View Slide

  7. 7/58
    Persistence (永続性) のモチベーション
    •ホログラム (オブジェクト) をリアル空間に関連付けて
    配置したい (その場にあるかのような)
    •アプリケーションを落としても、その場に残るようにし
    たい。(ゲームでの位置のセーブ機能)
    •ん? どゆこと?

    View Slide

  8. 8/58
    ダメな例1
    バーチャル洗濯機を
    時計の下に置いたが…

    View Slide

  9. 9/58
    ダメな例1
    バーチャル洗濯機を
    時計の下に置いたが…
    ARメガネを動かすと
    移動してしまう!

    View Slide

  10. 10/58
    良き例
    ARカメラが移動&回転しても、
    リアルの時計の下にいて欲しい!
    World Anchorで
    固定されてるイメージ

    View Slide

  11. 11/58
    ダメな例2
    バーチャル洗濯機を
    時計の下に置いて、
    アプリを落としたら…

    View Slide

  12. 12/58
    ダメな例2
    次の日アプリを起動した
    ら隣の家にあった

    View Slide

  13. 13/58
    良き例
    アプリを落としても、
    起動したら時計の下にあれ!
    これがPersistence (永続性)

    View Slide

  14. 14/58
    World Anchorを使うと
    こういうことが出来るようになる!

    View Slide

  15. 15/58
    クイズ
    •先程はアプリケーションを落とした場合、永続性が保
    たれてる例であった。
    では、アプリケーションを落とした後に
    さらにHoloLensの電源を落とした場合、
    永続性が保たれるか。
    1. 永続性は保たれる
    2. 永続性は保たれない

    View Slide

  16. 16/58
    なぜHoloLensは
    このようなことができるの?

    View Slide

  17. 17/58
    Spatial Coordinate Systems
    (空間座標系)
    のおかげさ

    View Slide

  18. 18/58
    リアル世界の座標系 vs HoloLens座標系
    •Unity上の 1 Unit = 現実世界の1m
    • ここまでは良かった
    •リアルの現在地 (緯度経度) を
    HoloLens世界に知らせる方法がない。
    • GPSあるけど精度悪すぎて非現実的
    •HoloLensはもっと小さな世界を繊細に表現したい

    View Slide

  19. 19/58
    World Anchor
    •絶対座標は厳しい…
    (だってGPSの精度悪すぎるんだもん)
    •よし、相対座標を採用しよう
    •Spatial Mappingで部屋の形状 (Mesh) わかるから、
    その相対位置で配置しよう。
    これがWorld Anchor
    の実装アイデア。
    ?

    View Slide

  20. 20/58
    仕組みはなんとなくわかった
    でもWorld Anchorの実装って
    難しいんでしょう?

    View Slide

  21. 21/58
    World Anchorは
    比較的かんたんです!
    (書籍引用)

    View Slide

  22. 22/58
    World Anchorはこれだけ覚えよう
    •World Anchor Managerから基本操作する。
    • 固定するオブジェクトの名前を考える。
    • 固定したい時はWorld AnchorをAttachする。
    • 固定したくない時はWorld AnchorをRemoveする。
    World Anchor Manager World Anchor Store
    オブジェクト
    AttachAnchor関数を実行したイメージ図
    登録
    名前: 冷蔵庫
    名前: 冷蔵庫
    GameObject
    World Anchor

    View Slide

  23. 23/58
    World Anchor Managerのコード
    •最初は気にしなくてもよし
    •World Anchor Storeを管理する
    •AnchorをAttachする (Store状況を見ながら)
    •AnchorをRemoveする (Storeから削除する)
    •World Anchor Storeには、
    Anchorが付けられたオブジェクトの
    情報がストックされている。
    World Anchor Store
    名前: 冷蔵庫
    GameObject
    名前: 時計
    GameObject



    World Anchor Manager

    View Slide

  24. 24/58
    では、書籍にのっとって
    手を動かしていきます!

    View Slide

  25. 25/58
    書籍のソースコードのダウンロード
    • https://github.com/PacktPublishing/HoloLens-Beginners-
    Guide をcloneまたはDownload Zipします。

    View Slide

  26. 26/58
    プロジェクトを新規作成

    View Slide

  27. 27/58
    書籍のGithubからChapter7をインポート
    •Unityのメニューから [Assets] > [Import Package] >
    [Custom Package]を選択
    •書籍のGithubのフォルダChapter7から
    Chapter7before.unitypackageをインポート

    View Slide

  28. 28/58
    Mixed Reality Toolkit Unityのダウンロード
    •https://github.com/Microsoft/MixedRealityToolkit-
    Unity/releases をクリック
    •自分のバージョンのunitypackageをダウンロード

    View Slide

  29. 29/58
    Mixed Reality Toolkit Unityのインポート
    •Unityのメニューから [Assets] > [Import Package] >
    [Custom Package]を選択
    •HoloToolkit-Unity-v1.2017.1.0.unitypackageを選択
    して全てをインポート

    View Slide

  30. 30/58
    Chapter7を選択
    •Unityのプロジェクタービューから[Scene] >
    [Chapter7]を選択。エラーが出なければOK

    View Slide

  31. 31/58
    オブジェクト準備
    •ヒエラルキービューの非アクティブの
    Sphereオブジェクトを削除する。
    •skeeオブジェクトの子供に
    TapToPlaceColliderオブジェクトが
    あれば削除する。

    View Slide

  32. 32/58
    BoxColliderのアタッチ
    •skeeオブジェクトを選択しBoxColliderをアタッチする。
    •CenterとSizeの値を以下のように設定
    • Center: X: -152 , Y: 39, Z: -335
    • Size: X: 304 , Y: 463 , Z: 1189

    View Slide

  33. 33/58
    PlaceSkeeBallMachine.csをアタッチ
    •skeeオブジェクトを選択しPlaceSkeeBallMachine.cs
    をアタッチする。

    View Slide

  34. 34/58
    World Anchorの実装
    •PlaceSkeeBallMachine.csを開く。
    •11,12行目を確認する。

    View Slide

  35. 35/58
    •40行目でSingletonのWorldAnchorManagerを代入
    •48~55行目でWorldAnchorManagerに
    skeeオブジェクトをアタッチ
    World Anchorの実装

    View Slide

  36. 36/58
    Unityでよく出るgameObject
    •コード中のgameObjectについて
    gameObject Scriptをアタッチしている実際の
    GameObject
    this.gameObject ↑ gameObjectと同じ
    this このScript。MonoBehaviourを継承

    View Slide

  37. 37/58
    Update関数内のRaycast
    •Update関数内のコード (Update関数はフレームごと
    に呼ばれるUnity特有の関数)

    View Slide

  38. 38/58
    OnInputClicked関数
    •AttachAnchor,RemoveAnchorの使用例

    View Slide

  39. 39/58
    WorldAnchorの実装のおさらい
    •おさらい
    • GameObjectにアンカーをアタッチしたい時
    WorldAnchorManager.Instance.AttachAnchor (ゲームオ
    ブジェクト, 名前); を呼ぶ
    • GameObjectからアンカーを外したい時
    WorldAnchorManager.Instance.RemoveAnchor (ゲーム
    オブジェクト); を呼ぶ
    • Anchorがアタッチされたオブジェクトは基本静止状態

    View Slide

  40. 40/58
    ApplicationManager.csの書き換え (1/2)
    •プロジェクトビューの[Scripts]>[ApplicationMangaer]
    を開く。

    View Slide

  41. 41/58
    ApplicationManager.csの書き換え (2/2)
    •Update関数の中身を書き換える。

    View Slide

  42. 42/58
    skeeの位置を変える

    View Slide

  43. 43/58
    AppManagerオブジェクトの編集

    View Slide

  44. 44/58
    World Anchor Managerを新しく作る

    View Slide

  45. 45/58
    実行するとエラーが出るみたい…
    •書籍の金言
    •Do not hesitate to search for an answer.
    答えを検索することをためらうな
    •今回の場合、WorldAnchorStoreがUnityEditor上で
    動作しないことが原因らしい。
    •つまり、HoloLensにBuildすればOK♪

    View Slide

  46. 46/58
    アプリデバッグの実装
    •詳しくは最終章でやるよ!
    •この章では、シンプルなテキストボックスを実装する。
    Debug Message
    が見える。

    View Slide

  47. 47/58
    デバッグ用のテキストを設定する
    •プロジェクトビューから [HoloToolkit] > [UI] >
    [Prefabs] > [3DTextPrefab]をヒエラルキービューの
    HoloLensCameraにドラッグ &ドロップする

    View Slide

  48. 48/58
    デバッグ用のテキストを設定する
    •Prefab化することで、元のPrefabと分離して新しい
    Prefabを作る。

    View Slide

  49. 49/58
    ApplicationManager.csを書き換える
    •Textmeshを書き換えられるようにする。

    View Slide

  50. 50/58
    ドラッグ&ドロップ
    •DebugInfoオヴジェクトをApplicationManagerと
    •結びつける。

    View Slide

  51. 51/58
    Startボタンの設置
    追加:
    SizeのZを0.01な
    ど0より大きくする

    View Slide

  52. 52/58
    名前の変更
    •先程の3DTextPrefabをCrtl + Dで複製する。
    •それぞれの名前を
    ”StartBtn”,“OptionBtn”にする

    View Slide

  53. 53/58
    ボタンの配置

    View Slide

  54. 54/58
    StartButton.csを加える

    View Slide

  55. 55/58
    StartButton.csを書き加える
    •OnInputClicked関数 (AirTapされたら呼ばれる関数)
    に以下のコードを加える。
    •ApplicationMangaer.Instance.debugTextMesh.text
    += “¥n Start Button Clicked”;

    View Slide

  56. 56/58
    やってみよう
    •OptionButtonも同様に行おう!
    •ApplicationMangaer.Instance.debugTextMesh.text
    += “¥n Option Button Clicked”;
    と書き加える。

    View Slide

  57. 57/58
    おわり〜
    •ビルドしよう!

    View Slide

  58. 58/58
    World Anchorまとめ
    •HoloLensでは、ホログラムの位置が大事。アプリ
    ケーションを落としても変わらない永続性が必要。
    •World Anchorは空間マッピングの相対座標によって
    達成される。
    •World Anchor ManagerによってWorld Anchorを
    管理する

    View Slide