7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UnityでOculus IntegrationのSampleFrameworkを使ってOculus Questのハンドトラッキングを試す

Last updated at Posted at 2020-01-16

はじめに

前回は、公式通りにハンドトラッキングを試しました。
UnityでOculus Questのハンドトラッキングを使ってみる(タッチ&ピンチ)

今回は、SampleFrameworkを使ってみます。

サンプルの HandsInteractionTrainScene は試しましたか?
これを参考に、キューブをタッチしたら色が変わるシンプルなものを作っていきます。
ダウンロード.gif

環境

Unity 2019.2.17f1

事前準備

  • UnityでQuest用のビルドができること
  • Oculus Integration Assetsを追加していること

Scene作成

Hierarchy
Oculus > VR > Prefabs > OVRCameraRig を追加
(最初にあったMainCameraは削除しておく)

Inspector
OVR Manager (script) > Input > Hand Tracking Support → [Controllers and Hands]
OVR Manager (script) > Tracking > Tracking Origin Type → [Floor Level]

image.png

手を追加

Oculus > SampleFramework > Core > HandsInteractions > Prefabs > Hands

これだけで両手の表示ができ、タイプも指定できる
image.png

掌を手前にすると手が黄色くなるので、ホームに戻るジェスチャーをしやすい
ダウンロード (2).gif

追記

OculusIntegration v13では↓を追加するようになっていた
Oculus > SampleFramework > Core > HandsInteractions > Prefabs > HandsManager

LeftHandとRightHandにはOVRCameraRigのLeftHandAnchorとRightHandAnchorに↓を追加して指定している
Oculus > VR > Prefabs > OVRHandPrefab

image.png

インタラクティブツール追加

Oculus > SampleFramework > Core > HandsInteractions > Prefabs > InteractableToolsSDKDriver

これだけで指で操作ができる
image.png

FingerTipPokeToolIndex で、人差し指の先に青い丸が表示され、コライダーが付いている状態になる
FingerTipPokeToolMiddle を RightHandTools に追加すると、中指もインタラクティブになる
RayToolで手から線がでる

キューブ追加

Cube を追加して CubeButton とする
位置と大きさを適当に調整(Scale:0.2, position: 0, 0.5, 1)

CubeButton の下にCreateEmptyで空のGameObjectを4つ作り、それぞれ
ButtonProximity、ButtonContact、ButtonAction、ButtonPlaneCenter にしておく

image.png

Inspector

  • ButtonProximity はボタンの近接なので、Scaleを2にしておく
  • ButtonContact はボタンの位置なのでそのまま
  • ButtonAction は押した位置なので小さくしておく(positionY:-0.3, ScaleY: 0.4)

3つのGameObject全てに↓を反映

  • Box Colliderを追加し Is Triggerをチェック
  • Add Component で Button Trigger Zone(Script) を追加
  • Button Trigger Zone の Parent Interactable Obj に親のCubeButtonを指定

image.png

CubeButtonに↓を反映

  • Add Component で Button Controller (Script) を追加

  • Proximity Zone に ButtonProximity を指定

  • Contact Zone に ButtonContact を指定

  • Action Zone に ButtonAction を指定

  • Button Plane Center に ButtonPlaneCenter を指定

  • All Valid Tools Tags でどの動作をしたときに有効にするか選べる

  • CubeButtonController.csスクリプトを作成して CubeButton に追加する

CubeButtonController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OculusSampleFramework;

public class CubeButtonController : MonoBehaviour
{
    private Renderer renderer;

    private void Awake()
    {
        renderer = this.GetComponent<Renderer>();
    }

    public void ColorChanged(InteractableStateArgs obj)
    {
        switch (obj.NewInteractableState)
        {
            case InteractableState.ProximityState:
                renderer.material.color = Color.yellow;
                break;
            case InteractableState.ContactState:
                renderer.material.color = Color.red;
                break;
            case InteractableState.ActionState:
                renderer.material.color = Color.green;
                break;
            default:
                renderer.material.color = Color.blue;
                break;
        }
    }
}

インタラクティブ情報を取得し、どのステートかによって色を変えています。

  • ButtonController の Interactable State Change で+をクリック
  • 追加したCubeButtonControllerスクリプトのColorChangeを反映

image.png

ビルド

最初青で、近くなったら黄色、キューブに当たったら赤、押し込んだら緑になる

ダウンロード (3).gif

さいごに

手を下に垂らしてお化けのポーズになると、手を認識してくれないので、
真上からボタンを押すことはできなかった。

単純に楽しむためなら、簡単で使いやすい。
サンプルのようにボタンの位置がカメラに追従したり、ボタンが凹んだり、色が付いたり、クリック音が鳴ったり、作り込むのはすごいなと思った。

次回はHandsを使ったピンチ操作を試します。
UnityでOculus IntegrationのSampleFrameworkを使ってOculus Questのハンドトラッキングを試す (2)

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?