Chapter 4 - Immersion and teleporting
目標
各タイプのMixed Realityデバイスに体験を提供する
ビルドするもの
ImmersiveデバイスユーザーにImmersive Viewの島設置するために,アプリケーションをアップデートします。HoloLensユーザーは島を俯瞰している状態のままになります。各タイプのデバイスユーザーは,ワールド上の他のユーザーを見ることができます。例えば,Immersiveデバイスユーザーは島上の他の道にいるアバターを視認でき,HoloLensユーザーは島の上に浮かぶ巨大な雲として把握することができます。また,Immersiveデバイスユーザーは,HoloLensユーザーが島のどこかを見ていれば,Gaze Rayカーソルによってその場所を知ることができます。HoloLensユーザーは島にいる各Immersiveデバイスユーザーを表すアバターを見ることができます。
Immersiveデバイスの入力をUpdateする
- Mixed Reality TeleportをMixedRealityCameraParentに追加
・HierarchyでUslandを選択
・HierarchyでLevelControlを有効にする
・HierarchyでMixedRealityCameraParentを選択
・Inspectorで Add Componentをクリック
・Mixed Reality Teleportとタイプして入力
コードを理解する
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を返します。いずれかのボタンが上げられた場合,ユーザーは回転する必要があることを知ります。
ユーザーが回転すると,'fade control'という簡単なスクリプトを利用してフェードアウトとフェードインが実行されます。
この処理は違和感を覚える不自然な移動を見ることを防ぎます。フェードインとフェードアウトエフェクトは,かなりシンプルです。Main cameraの前には黒いQuadがあります。フェードアウトすると,アルファ値が0から1へと遷移します。これにより、Quadの黒いピクセルが徐々にレンダリングされ、背後にあるものが隠されます。フェードインすると、アルファ値が0に戻ります。
回転を計算するとき,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ボタンが押下されているか確認します。
ボタンが押下されている間,テレポートカーソルが描画され,スクリプトはユーザーのGaze位置にRayを飛ばします。そのRay が多かれ少なかれ上向きになっているサーフェスと衝突すると,サーフェスはテレポートするには良いサーフェスであると判断し,テレポートカーソルのアニメーションが有効になります。Rayがサーフェスのどこにも衝突しない場合,アニメーションは無効になります。
Yボタンが離され,計算されたRayの位置が有効である場合,スクリプトはRayが交差した位置でSetWorldPosition を呼び出します。
進捗を楽しむ
今回,友達を探す必要があります
もう一度,HoloLensユーザーはセッションをホストします。他のユーザーはセッションに参加します。アプリケーションはImmersiveデバイスから参加した最初の3人のユーザーを島にある3つの道のうちの1つに配置します。このセクションでは島を自由に探索できます。
詳細
1.雲のなかの顔を見ることができ,ImmersiveデバイスユーザーはHoloLensユーザーがどの方向を見ているか見ることができます
2. 島内のアバターは,回転できる首があります。現実の挙動には従っていない(そのような情報は持っていない)ですが,良い体験を生むことができます。
3.HoloLenユーザーが島を見ると,Immersiveデバイスユーザーはそのカーソルを見ることができます
4.HoloLensユーザーを表す雲は影を落とします