VRついてますが、普通にFPSやマウスカーソルでも応用が聞くため、かなり使いやすいアセットになっています。作り方も丁寧なため、勉強用にも持って来いのアセットになっています。
VR Gaze Interactionで出来ること
このアセット・パッケージのコンセプトは、VRなどで用いられる視点によるインタラクションを実装するための機能が存在します。具体的な動作としては
- 対象のオブジェクトを見始めた瞬間
- 見ている最中
- 一定時間見続けてから動作を行う
- 目線が対象のオブジェクトから外れた
以上の条件時にイベントを発生させることが出来ます。また、一定時間見続けてという部分ではドーナツ型のゲージ表示も出来るようになっています。
注視点のレティクルは、反応するレイヤーを指定したり、距離の調整も出来るようになっています。
VR Gaze Interactionの導入方法
導入する方法は大きく3つあります。導入だけなら後の2つのほうが軽量なんですが、この後の説明はサンプルプロジェクトを利用する方法で進めます。
- Githubからサンプルプロジェクトを利用
- Unityのアセットストアから導入
- Githubに公開してあるパッケージから導入
Githubからサンプルプロジェクトを利用
こちらの開発者さんは、作ったものをGithubに公開して共有しています。Githubからプロジェクトを入手してそのまま動かすことですぐにサンプルを試すことが出来ます。
https://github.com/tomazsaraiva/unity-gaze-interaction
Code>Download ZIPなどでプロジェクトをダウンロードする方法が簡単だと思います。
注意点
ダウンロードしたプロジェクトは、以下のパッケージを導入しないとエラーが出たままになります。
- InputSystem
- Cinemachine
Unityのアセットストアから導入
アセットストアから入手する場合、次のリンクから入手してください。導入したいプロジェクトにはパッケージマネージャーからMy Assetsを選択してアセットを導入してください。
Githubに公開してあるパッケージから導入
こちらも上記のGithubと同じリポジトリからUnityPackageを手に入れることが出来ます。多分UnityAssetStoreより更新しやすいため、こちらから入手するほうがいいかも。
https://github.com/tomazsaraiva/unity-gaze-interaction/releases
サンプルを動かしながら出来ることを確認する
サンプルプロジェクトを手に入れ、パッケージ「InputSystem/Cinemachine」の導入が終わると動かすことが出来るようになります。VRデバイスはなしでも試すことが出来ます。
動かしてみて動作確認
動かしてみると、画面中心に青い点のレティクルが表示されると思います。これはなにかの当たり判定と一定距離が無いと表示されないため、WASDキーで移動して、壁などを見て表示を確認してみてください。
また、ゲーム開始直後の正面に2つほど箱があると思います。これらを見続けることで箱が揺れるインタラクションを確認することが出来ます。
インタラクション側の設定
いわゆる見る側の設定の入れ方。サンプルごと導入している場合は、GazeInteraction/Prefabs/Gaze_Interactorプレファブをメインカメラの子供にセットします。この時position/rotation/scaleはデフォルトの状態にしてください。カメラのtransformと相対的にずれてない状態を作ることが重要です。
プレファブない場合でも、カメラの子供にGameObject作って、GazeInteractorをアタッチするだけでOK。各パラメータは以下。
パラメータ名 | 設定 |
---|---|
Max Detection Distance | GazeInteractorで検出できる最大距離 |
Min Detection Distance | GazeInteractorで検出開始する処理。 近すぎたりしたら反応しないための変数 |
Time To Activate | 何秒見続けたら起動させるかの時間 3秒見たら起動ね!とかそういう時間。 |
Layer Mask | 検出する当たり判定のレイヤー 後で出てくるGazeInteractableのレイヤーと連動 |
インタラクタブル側の設定
先程の揺れるブロックで言うところのブロック側の設定。GazeInteractableコンポーネントと同じインスペクター内にColliderを付けてください。
設定出来るパラメータとイベント内容は以下
パラメータ・イベント名 | 設定・機能 |
---|---|
Is Activable | OnGazeActivateイベントを起動させるかどうか |
Exit Delay | 当たり判定から外れても、すぐに離れたことにせず指定した時間遅延させる |
OnGazeEnter | GazeInteractorが当たり判定を捉えた瞬間呼ばれる |
OnGazeStay | GazeInteractorが当たり判定を捉えている間呼ばれる |
OnGazeExit | GazeInteractorが当たり判定から外れて、Exit Delay秒離れ続けた場合呼ばれる |
OnGazeActivated | IsActivableがTrueの場合、呼ばれる。 呼ばれるタイミングはOnGazeEnter後、InteractorのTimeToActivateで指定した時間が経過した後に呼ばれる。 |
OnGazeToggle | OnGazeEnter時にTrue,OnGazeExit時にFalseを受け取れる。 開始終了で何らかの処理を書きたい場合、これだけで実装出来るかも |
コメント