Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

42/58 skeeの位置を変える

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

53/58 ボタンの配置

Slide 54

Slide 54 text

54/58 StartButton.csを加える

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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