HoloLensでは現実空間に3Dオブジェクトを配置、作用させることによってMixedReality(複合現実)を実現しています。
この3DオブジェクトはHoloLensやxRの分野だけではなく、映画、ゲーム、製造、建築など多くの業界で幅広く用いられるようになりました。
3Dオブジェクトを作成するツールも増え、少し良い性能のPCさえあれば3Dモデルを作ることは誰でも簡単にできるようになりました。
前回からライトセーバーのコアとなるカイバークリスタルを作っています。 今回は7回目の記事です。
前回の記事はこちら
〇フォースを使う
今回のライトセーバーはHoloLensで用いるために作成をしています。
HoloLens (1st)の新型機であるHoloLens 2では手の指を認識することができます。
そのためものを握る、ボタンを押す、デコピンをするなどHoloLens 1stに比べよりホログラムの3DオブジェクトとのMixedRealityな対話を実現しています。
HoloLens 2で用いることができる手のGestureには大きく分け以下の二つがあります。
・手元のものに対するアクション Grab ,Touch
手に近いオブジェクトに対するアクションで、つかむ、離す、触る両手で引き延ばすなど様々なことができます。
HoloLens 1stでは行うことができなかったアクションとユーザーの体験ができます。
・遠くのものに対するアクション Hand Ray
HoloLens 1stでも用いることができたArtTapです。
遠くのものに手を向けると手からビームが伸びカーソルが表示されます。
オブジェクトにカーソルを合わせることでAirTapなどを行えます。
今回はこの遠くのものに対するアクション、Hand Rayを用いてジェダイが使用するフォースを再現します。
〇フォースプル
フォースには様々な使用法があります。時には癒しや対話、時には戦闘、また時には未来予知とその使用者によって大きく使い方が変わるようです。
しかしフォースを使うものに共通の能力としてフォースプルがあります。
・フォースプルとは?
フォースを用いた物理的オブジェクトを動かし、引き寄せる能力です。
伝説のジェダイであるルーク・スカイウォーカーは手の届かない場所にあるライトセーバーをフォースプルによって手元に引き寄せ窮地を脱していると聞きます。
また、その甥にあたるベン・ソロもまたフォースプルでライトセーバーを使用しています。
〇Forcusイベントを使う
フォースプルをHoloLensで使用するためには、手から伸びたHand Rayのカーソルがオブジェクトに当たった時に発生するイベント(Forcusイベント)を実装します。
MRTKでは[Interactive.cs]というスクリプトで提供されています。
このままではHand Rayのカーソルの当たり判定がないためカイバークリスタルに[Capsule Collider]を追加します。
カイバークリスタルに当たり判定を持つことができました。
次に「Hand Rayのカーソルが当たった時になにをするか?」というイベントを追加します。
カイバークリスタルに[Interactive.cs]を[Add Component]から追加します。
また、[Profiles]の[Target]にHand Rayのカーソルが当たった時アクションを起こすTargetを設定します。今回の場合はカイバークリスタルになります。
何をするか?に該当するのが[Theme]になります。
ThemeはUnityの[Project]で右クリックをして[Create]→[Mixed Reality]→[Theme]を選択することで作成できます。
作成したThemeを開くと[States]を設定するひつようがあるため[DefaultInteractableStates]を選択します。
DefaultInteractableStatesの[Theme Runtime]を[InteractiveAnimatorTheme]へ切り替えます。
InteractiveAnimatorThameはカーソルがオブジェクトに当たった際に対象のアニメーション遷移を行うものです。
それぞれ次のようなパラメーターがあります。
・Default
カーソルが当たっていない場合のアニメーション遷移です。
・Focus
カーソルがThemeを適応しているInteractive.csがアタッチされているオブジェクトに当たった場合のアニメーション遷移です。
・Pressed
カーソルがThemeを適応しているInteractive.csがアタッチされているオブジェクトに触った場合のアニメーション遷移です。
・Disabled
カーソルが見つからない場合のアニメーション遷移です。
これでHand Rayによるフォースを感じる機能は実装できました。
しかしまだフォースを感じた後の動作に関してはありません、次回Animationでクリスタルのカラーを変化させます。