夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLensで使える3Dモデルを作る ~ライトセーバーを作る~ その⑦ カイバークリスタルの色をフォースで変化させる。前編

 HoloLensでは現実空間に3Dオブジェクトを配置、作用させることによってMixedReality(複合現実)を実現しています。

 この3DオブジェクトはHoloLensやxRの分野だけではなく、映画、ゲーム、製造、建築など多くの業界で幅広く用いられるようになりました。

 3Dオブジェクトを作成するツールも増え、少し良い性能のPCさえあれば3Dモデルを作ることは誰でも簡単にできるようになりました。

 前回からライトセーバーのコアとなるカイバークリスタルを作っています。 今回は7回目の記事です。

 前回の記事はこちら

redhologerbera.hatenablog.com

〇フォースを使う

 今回のライトセーバーはHoloLensで用いるために作成をしています。

 HoloLens (1st)の新型機であるHoloLens 2では手の指を認識することができます。

 そのためものを握る、ボタンを押す、デコピンをするなどHoloLens 1stに比べよりホログラムの3DオブジェクトとのMixedRealityな対話を実現しています。

 HoloLens 2で用いることができる手のGestureには大きく分け以下の二つがあります。

 

・手元のものに対するアクション Grab ,Touch

 手に近いオブジェクトに対するアクションで、つかむ、離す、触る両手で引き延ばすなど様々なことができます。

 HoloLens 1stでは行うことができなかったアクションとユーザーの体験ができます。

www.youtube.com

・遠くのものに対するアクション Hand Ray

 HoloLens 1stでも用いることができたArtTapです。

 遠くのものに手を向けると手からビームが伸びカーソルが表示されます。

 オブジェクトにカーソルを合わせることでAirTapなどを行えます。 

f:id:Holomoto-Sumire:20200111143255p:plain

 今回はこの遠くのものに対するアクション、Hand Rayを用いてジェダイが使用するフォースを再現します。

〇フォースプル

 フォースには様々な使用法があります。時には癒しや対話、時には戦闘、また時には未来予知とその使用者によって大きく使い方が変わるようです。

 しかしフォースを使うものに共通の能力としてフォースプルがあります。

・フォースプルとは?

 フォースを用いた物理的オブジェクトを動かし、引き寄せる能力です。

 伝説のジェダイであるルーク・スカイウォーカーは手の届かない場所にあるライトセーバーをフォースプルによって手元に引き寄せ窮地を脱していると聞きます。

  www.youtube.com

 また、その甥にあたるベン・ソロもまたフォースプルでライトセーバーを使用しています。

www.youtube.com

〇Forcusイベントを使う

 フォースプルをHoloLensで使用するためには、手から伸びたHand Rayのカーソルがオブジェクトに当たった時に発生するイベント(Forcusイベント)を実装します。

 MRTKでは[Interactive.cs]というスクリプトで提供されています。

 このままではHand Rayのカーソルの当たり判定がないためカイバークリスタルに[Capsule Collider]を追加します。

 f:id:Holomoto-Sumire:20200111163301j:plain

 カイバークリスタルに当たり判定を持つことができました。

 次に「Hand Rayのカーソルが当たった時になにをするか?」というイベントを追加します。

 カイバークリスタルに[Interactive.cs]を[Add Component]から追加します。

 f:id:Holomoto-Sumire:20200111163850j:plain    また、[Profiles]の[Target]にHand Rayのカーソルが当たった時アクションを起こすTargetを設定します。今回の場合はカイバークリスタルになります。

 何をするか?に該当するのが[Theme]になります。

 f:id:Holomoto-Sumire:20200111165124j:plain     ThemeはUnityの[Project]で右クリックをして[Create]→[Mixed Reality]→[Theme]を選択することで作成できます。

 作成したThemeを開くと[States]を設定するひつようがあるため[DefaultInteractableStates]を選択します。

 f:id:Holomoto-Sumire:20200111165917j:plain

 DefaultInteractableStatesの[Theme Runtime]を[InteractiveAnimatorTheme]へ切り替えます。

 InteractiveAnimatorThameはカーソルがオブジェクトに当たった際に対象のアニメーション遷移を行うものです。

 それぞれ次のようなパラメーターがあります。

・Default

 カーソルが当たっていない場合のアニメーション遷移です。

・Focus

 カーソルがThemeを適応しているInteractive.csがアタッチされているオブジェクトに当たった場合のアニメーション遷移です。

・Pressed

 カーソルがThemeを適応しているInteractive.csがアタッチされているオブジェクトに触った場合のアニメーション遷移です。

・Disabled

 カーソルが見つからない場合のアニメーション遷移です。

 これでHand Rayによるフォースを感じる機能は実装できました。

 しかしまだフォースを感じた後の動作に関してはありません、次回Animationでクリスタルのカラーを変化させます。