読者です 読者をやめる 読者になる 読者になる

Tutti Lab

元シリコンバレー在住のおっさん技術者、モバイルVRアプリ開発に挑戦中

Oculus Touchをつかってみる

Oculus Touchが出荷され、約一月が経ちました。Oculus StoreにはOculus Touch対応コンテンツが多数並び、Oculus Touchの凄さを体験できるわけですが、一方で開発向きとなるとまだ情報が足りない状況のようです。
今回は、Oculus Touchの練習用に作成したコンテンツを取り上げ、開発のポイントを挙げていきたいと思います。
youtu.be
コンテンツは、今年大流行したアレを、Oculus Touchで体験する、というものです。

情報収取

Oculus Touchの技術情報については、以下が必読です。

準備

Oculus Touchにて「手やアバターを表示し、なにかをつかむコンテンツを作る」ためには、以下のインストールが必要です(詳細は上記情報収集をご参照)

  • Oculus Utilities for Unity 5(こちらからダウンロード可能)
  • Oculus Avatar SDK(同じくこちらからダウンロード可能)
  • Avater Grab Sample(こちらからダウンロード可能)、なおUnity 5.5でのみ動作(Unity 5.4ではクラッシュ)とのこと
  • その後適当なプロジェクトを作成し、上記ダウンロードしたパッケージ(OculusUtilities.unitypackage, OvrAvatar.unityPackage, AvatarGrabSample.unitypackage)をそれぞれインポートします

サンプル実行

Assets/Samples/Content/AvaterWithGrab をダブルクリックして、シーンをロードします。あとは、PlayerSettings→Other SettingsのVirtual Reality Supportedをチェックし、実行してみます。
f:id:tuti107:20161231102951p:plain
つかむ・離す・投げる、一通りのことができます。

つかめるものを追加

まずは、サンプルで「つかめるもの」がどのようになっているかを見てみます。
f:id:tuti107:20161231103341p:plain
ポイントは、Grabbableというスクリプトです。これはAvater Grab Sampleに含まれるスクリプトで、これを追加したオブジェクト(かつ、Collider, Rigidbodyも追加する必要あり)がつかめるようになります。
つかんだ時、離した時の振る舞いは、Grabbable#GrabBegin()、Grabbable#GrabEnd()メソッドにそれぞれ記述します。これらメソッドはvirtualメソッドですので、Grabbableクラスの子クラスを作ってこれらメソッドをオーバーライドすれば、任意のつかむ・離す際の処理を作成することができます。

Oculus Touchのバイブレーション

OVRHapticsClipを使用します。AudioClipを引数としてOVRHapticsClipを作成することで、そのAudioClipの音量に基づいた振動を作成できます。
作成したOVRHapticsClipを引数としてOVRHaptics.RightChannel.Mix()(=右側コントローラ、左側の場合はOVRHaptics.LeftChannel.Mix())を呼び出すことで、Oculus Touchが振動します。なお、振動させるためのメソッドにはMix()以外に幾つかあり、それぞれ挙動が異なります(詳細は情報収集で挙げたサイトを御覧ください)。
以下は、スタティックメソッドSE.PlaySE()を呼び出すと、効果音鳴動+振動するサンプルです。

using UnityEngine;

public class SE : MonoBehaviour {

  public AudioSource audioSource;
  public OVRHapticsClip hapticClip;

  private static SE thisObj;

  void Start () {
    thisObj = this;
    hapticClip = new OVRHapticsClip(audioSource.clip);
  }
	
  public static void PlaySE() {
    if (thisObj != null) {
      thisObj.audioSource.Play();
      OVRHaptics.RightChannel.Mix(thisObj.hapticClip);
      OVRHaptics.LeftChannel.Mix(thisObj.hapticClip);
    }
  }
}

No Oculus Rift App ID has been provided

エディタで実行すると、問題なく実行できますが、上記のエラーがでます。Oculusサイトにて、アプリを登録してIDを取得することで、本エラーを回避できるようです(私がつくったコンテンツをエディタ上で実行する上では特に問題がなかったため、試していません)。詳細は、上記「情報収集」で挙げたサイトを御覧ください。

PP◯Pっぽい素材

終わりに

Oculus Touchは本当にすごいです。CG空間に触る、というユーザ体験は先行していたHTC Viveをも超えるものでは、と個人的には思います。