仮想と物理とエトセトラ

xRや物理とかごった煮の備忘録的技術ブログ

MRTK(2.7.2)のExampleを試す その5 (Demos - HandCoach)

今回は下記の続きです。

xr-physics-work-etc.hatenablog.com

前提

今回の前提は以下です。
Unity 2019.4.17f1
MRTK 2.7.2

準備

いつものようにPackage Managerからデモをインポートします。
すでにImport済みの場合は、Input againで再度インポートできます。
f:id:napo909:20220227143711p:plain

HandCoachExample

このシーンはユーザに手の動きを指示するための、基本的な動きを確認することができます。
タップや選択などの基本的な操作を仮想の手で、ヒント表示することができます。
f:id:napo909:20220227144512p:plain

HandInteractionHint.cs

このスクリプトでは、手の動きを指示する動きのアニメーションの設定を行うことができます。
使用する際、アタッチしたオブジェクトの子オブジェクトにHandRigを設定して使用します。
f:id:napo909:20220227145811p:plain

github.com

例 : StaticHandCoachRoot_R
f:id:napo909:20220227145855p:plain

  • Hint Display Delay
    手がトラッキングされていない状態で、手を表示するまでの遅延時間(秒)。

  • Hide If Hand Tracked
    bool。Trueの場合、手がトラッキングされている際にはヒントが表示されない。

  • Tracked Hand Hint Dispaly Delay
    手がトラッキングされている状態で、手を表示するまでの遅延時間(秒)。

  • Auto Activate
    bool。Trueの場合、コンポーネントがActiveになるたびにヒントが表示される。

  • Animation State
    ループ中に再生するアニメーション名を文字列で設定。 f:id:napo909:20220227171106p:plain
    右手の場合。
    ※ 子オブジェクトのAnimatorを使用。

  • Repeat Delay
    ヒントの1ループが終わって次が始まるまでの時間(秒)。

MoveToTarget.cs

このスクリプトでは、手のヒントをある位置から目標位置まで移動させることができます。

github.com

例:InteractionHint_R
f:id:napo909:20220227153256p:plain

  • Tracking Object
    移動前の位置を示すGameObject

  • Target Object
    移動後の位置を示すGameObject

  • Root Object
    ルートオブジェクト。相対位置を算出するために使用。
    Tracking ObjectとTarget Objectと共通の親オブジェクトを選択する。

  • Duration
    Traking ObjectからTarget Objectまでの移動時間

  • Target Offset
    目標位置座標の調整用オフセット。

  • Animation Curve
    Tracking ObjectからTarget Objectに移動する際のLerp曲線。

public関数のFollow()とMoveToTargetPosition()は、アニメーションイベントとして登録され、アニメーションが実施されるタイミングで実行されます。
これらを外部のスクリプトから実行すれば、HandInteractionHint.csと切り離して移動用の関数として使用できます。

docs.unity3d.com

f:id:napo909:20220227175328p:plain

RotateAroundPoint.cs

このスクリプトでは、ある点を中心に手のヒントを回転させることができます。

github.com

例:RotatingHandCoachRoot_R
f:id:napo909:20220227165611p:plain

  • Centered Parent
    回転中心を中心とした親オブジェクト

  • Inverse Parent
    ハンドの向きを同じにするために、Centerd Parentと逆に回転させる親オブジェクト

  • Pivot Position
    動作の開始点。

  • Duration
    CenteredParentを中心とした回転の継続時間(秒)。

  • Animation Curve
    回転を時間軸で制御するLerp曲線。

  • Rotation Vector
    各軸を何度回転させるか。

public関数のResetAndDeterminePivot()とRotateToTarget()はアニメーションイベントとして登録され、アニメーションが実施されるタイミングで実行されます。

f:id:napo909:20220227175355p:plain

# 変数名と用途が異なるのは、私の英語力が低くて間違って認識しているだけ。。?

キリが良いので今回はここまで。
次回はDeos-HandTrakingを取り扱います。