戯言日記

ホロレンジャーの戦いの記録

Mixed Reality 250 翻訳 第4章

Chapter 4 - Immersion and teleporting

youtu.be

目標

各タイプのMixed Realityデバイスに体験を提供する

ビルドするもの

ImmersiveデバイスユーザーにImmersive Viewの島設置するために,アプリケーションをアップデートします。HoloLensユーザーは島を俯瞰している状態のままになります。各タイプのデバイスユーザーは,ワールド上の他のユーザーを見ることができます。例えば,Immersiveデバイスユーザーは島上の他の道にいるアバターを視認でき,HoloLensユーザーは島の上に浮かぶ巨大な雲として把握することができます。また,Immersiveデバイスユーザーは,HoloLensユーザーが島のどこかを見ていれば,Gaze Rayカーソルによってその場所を知ることができます。HoloLensユーザーは島にいる各Immersiveデバイスユーザーを表すアバターを見ることができます。

Immersiveデバイスの入力をUpdateする

  • Mixed Reality TeleportをMixedRealityCameraParentに追加

  ・HierarchyでUslandを選択
  ・HierarchyでLevelControlを有効にする

f:id:haikage1755:20170727224431p:plain

  ・HierarchyでMixedRealityCameraParentを選択
  ・Inspectorで Add Componentをクリック
  ・Mixed Reality Teleportとタイプして入力

f:id:haikage1755:20170727224520p:plain

コードを理解する

 ImmersiveデバイスユーザーはケーブルでPCと接続されますが,この島はケーブルの長さに対して巨大です。これを補うには,ユーザーの動きと独立してカメラを動かす必要があります。Mixed Reality アプリケーションの設計について更に情報(特に自己移動と歩行)が必要な場合は次のページを見て下さい。(https://developer.microsoft.com/en-us/windows/mixed-reality/comfort)

このプロセスを説明するためには2つの用語を定義することが有用になります。一つは"dolly(移動式撮影機台)",これはユーザーから独立してカメラを移動するオブジェクトです。dollyの子オブジェクトはmain cameraになります。main cameraはユーザーの頭にアタッチされています。

Assets\AppPrefabs\Support\Scripts\GameLogic から MixedRealityTeleport.csをダブルクリックしてください。

MixedRealityTeleport は2つのジョブを持ちます。まず,バンパーを用いた回転の処理です。Update関数では,LeftBumper と RightBumper上で'ButtonUp'をポーリングします。GetButtonUp は押し下げられたボタンが上がった最初のフレームでtrueを返します。いずれかのボタンが上げられた場合,ユーザーは回転する必要があることを知ります。

f:id:haikage1755:20170812143242p:plain

ユーザーが回転すると,'fade control'という簡単なスクリプトを利用してフェードアウトとフェードインが実行されます。

f:id:haikage1755:20170812115508p:plain

この処理は違和感を覚える不自然な移動を見ることを防ぎます。フェードインとフェードアウトエフェクトは,かなりシンプルです。Main cameraの前には黒いQuadがあります。フェードアウトすると,アルファ値が0から1へと遷移します。これにより、Quadの黒いピクセルが徐々にレンダリングされ、背後にあるものが隠されます。フェードインすると、アルファ値が0に戻ります。

f:id:haikage1755:20170812114323p:plain

f:id:haikage1755:20170812115206p:plain

回転を計算するとき,dollyが回転していることに注意してMain cameraの周りについて回転を計算します。これはMain cameraが原点から離れるにつれて重要になってきます。精度の低いdolly周りの回転はユーザーの視点から離れていきます。実際,カメラ周りに回転しなかった場合,ユーザーは回転ではなく,dolly周りについて回転移動してしまいます。

2つ目のMixedRealityTeleportのジョブは,dollyの移動です。これはSetWorldPositionで処理されます。SetWorldPositionはユーザーが知りたい自分のいるのワールド位置を要求する。dollyをその位置からmain cameraのローカル位置を引いた場所に置き,そのオフセットを各フレームで加算する必要がある。


Assets\AppPrefabs\Support\Scripts\GameLogicからTeleportScript.csをダブルクリックしてください。

このスクリプトは,MixedRealityTeleportより少し複雑です。このスクリプトでは,XboxコントローラのYボタンが押下されているか確認します。

f:id:haikage1755:20170812120326p:plain

ボタンが押下されている間,テレポートカーソルが描画され,スクリプトはユーザーのGaze位置にRayを飛ばします。そのRay が多かれ少なかれ上向きになっているサーフェスと衝突すると,サーフェスはテレポートするには良いサーフェスであると判断し,テレポートカーソルのアニメーションが有効になります。Rayがサーフェスのどこにも衝突しない場合,アニメーションは無効になります。

f:id:haikage1755:20170812121127p:plain

Yボタンが離され,計算されたRayの位置が有効である場合,スクリプトはRayが交差した位置でSetWorldPosition を呼び出します。

f:id:haikage1755:20170812121255p:plain

進捗を楽しむ

今回,友達を探す必要があります

もう一度,HoloLensユーザーはセッションをホストします。他のユーザーはセッションに参加します。アプリケーションはImmersiveデバイスから参加した最初の3人のユーザーを島にある3つの道のうちの1つに配置します。このセクションでは島を自由に探索できます。

詳細
 1.雲のなかの顔を見ることができ,ImmersiveデバイスユーザーはHoloLensユーザーがどの方向を見ているか見ることができます
 2. 島内のアバターは,回転できる首があります。現実の挙動には従っていない(そのような情報は持っていない)ですが,良い体験を生むことができます。
 3.HoloLenユーザーが島を見ると,Immersiveデバイスユーザーはそのカーソルを見ることができます
 4.HoloLensユーザーを表す雲は影を落とします

[研究者になりたかった青二才の戯言日記]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」