1
2

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 5 years have passed since last update.

Unity+VIVE Wave SDKでのVIVE Focus Plus用シーンのセットアップの基礎

Last updated at Posted at 2019-08-22

はじめに

VIVE Focus Plusでアプリを作るには、VIVE Wave SDKを用います。Unity用のSDKもあり、その中のサンプルシーンを見たり、ドキュメントを見ることで一応基本的な使い方はわかりますが、ビミョーにわかりづらいので、基本的なところをメモとして残しておきます。始める前に、Unityプロジェクトを新しく作って、Wave SDKのUnityPackageをインポートしておいてください。

環境設定

公式ページを参考にセットアップしてください。Unity2019を使っていて、ターゲットとなるAPIレベルが使えなくてビルド時にエラーが出る場合は、管理者権限でコマンドプロンプトを開いて、...\Hub\Editor\2019.3.0a11\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\tools\bin(Unity2019.3.0a11の場合)へ移動して、sdkmanager "platforms;android-25"というふうに必要なパッケージをインストールしてください。

ビルドについては、Vive Wave SDKがおすすめしてくる設定で良いのですが、Graphics APIsの最初がVulkanではなくOpenGLES3であることを確認してください。Vulkanが最初だとアプリが動作しません。

image.png

カメラの設定

シーン内のMain Cameraは削除して、代わりにAssets/WaveVR/Prefabsの"WaveVR"プレハブをヒエラルキーにドラッグ&ドロップしてください。
image.png

コントローラーの設定

ControllerLoaderプレハブをヒエラルキーにドラッグ&ドロップしてください。両手を使うなら、2つ用意する必要があります。

image.png

ここで、Vive Wave独特の"dominant hand"という概念に注意してください(くわしくはこちら)。これは「主に使う手」という意味で、Right hand modeの場合は右手、Left hand modeの場合は左手がdominant handになります。dominantでない方はnon dominantとなります。ControllerLoaderのWaveVR_ControllerLoaderコンポーネントの"Type"の設定が、コントローラーの一つで"dominant", もう一つで"non dominant"になる必要がありますので注意してください。

また、Adaptive loadingにチェックが入っている場合、実行時にWaveVR_ControllerLoaderによってAdaptiveControllerプレハブがインスタンス化されます。WaveVR_ControllerLoaderそのものがコントローラになるわけではないので注意してください。

image.png

ボタン入力

Vive Wave SDKにはWaveVRButtonsというプレハブがあり、その中のWaveVR_ButtonListコンポーネントによってボタン入力に関する設定ができます。これが無いとボタン入力ができないので注意してください。

image.png

この中のButtonsのリストの内容を変えることによって、使うボタンを指定できます。アプリで使わないボタンは動作しないようにできるので便利ですね。

スクリプトの中では、WaveVR_Controller.Input(device)によってdeviceで指定されたデバイスの状態を見ることができます。deviceにはWaveVR_Controller.EDeviceType.DominantのようにWaveVR_Controller.EDeviceType型を使ってdominant/non dominantで指定するか、WVR_DeviceTypeを使ってRight/Leftで指定するかができます。

そして、WaveVR_Controller.Input(WaveVR_Controller.EDeviceType.Dominant).GetPress(WaveVR_ButtonList.EButtons.Trigger)のようにGetPress, GetPressDown, GetPressUpなどのメソッドにbuttonIDを与えることで入力の状態を見ることができます。buttonIDはWaveVR_ButtonList.EButtons型で指定できます。

GUI

VR内でコントーラーからのビーム+ポインターを使ってボタンを押す場合は、ヒエラルキーにInputModuleManagerプレハブを加え、CanvasにはWaveVR_AddEventSystemGUIコンポーネントを追加します。このとき、ボタン一つ一つに対して別々に親となるCanvasを作るようにしてください。 言い換えれば、一つのCanvasの直下に複数のボタンがある状態だと上手く動作しません。ボタンそれぞれに、そのボタンだけと対応するCanvasを用意してください。

トリガーなどのボタン入力はWaveVRButtonsプレハブを追加することで処理できます。
image.png
image.png

レーザーポインターには Fixed Beam Mode, Flexible Beam Modeがあり、Fixedの場合レーザーの長さは固定ですが、Flexibleの場合は、ボタンとの距離に応じて長さが変わります。見やすいのは後者なのでお薦めです。この変更はInputModuleManagerの中で行います。Override System Settingsにチェックを入れ、Raycast ModeをBeamにしてください。

image.png

おわりに

これだけあれば、基本的なことはOKだと思いますが、公式サンプルには他にも色々便利な機能が紹介されてるので、併せてご覧ください。

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?