眠くなっちゃった

気持ちで書きます

HTC Viveを使ってCubeに触る

はじめに

最近話題(?)のViveを触らせていただける機会があったので簡単なものを作って遊びました.Unityを使用してCubeに触るまでの過程をとりあえずメモしておきます.あとで図を入れたりして編集するかもしれません.

Viveのセットアップ

まず箱に入っている説明書のとおりに http://www.htcvive.com/us/setup/ を開いて"Download Vive Setup"というボタンを押してインストーラをダウンロードします.あとはインストーラの指示に従ってセットアップを行います.セットアップが一通り終わるとチュートリアルが始まります.ここで様々なエラーが出る場合があるようですが,私がやったときは何もなかったので省きます(本当は2台のPCでやって片方だけHMDを認識しない問題が出ましたが...).

UnityでViveを使う

インストールが長いのとチュートリアルが楽しいのでここにくるまで結構時間がかかったのではないでしょうか(僕だけですかね...)?次はUnityでViveを使えるようにしてからサンプルで遊んでみます.

まずはUnityを開いて新しいプロジェクトを3Dを選択して作ります.開いたらメニューバーのWindow -> Asset Storeと選択し,Asset Storeを開きます.Asset Storeで"Steam VR Plugin"と検索して無料の"Steam VR Plugin"というアセットをダウンロード,インポートします.インポート終了後,開発環境に応じて設定を変えたりするような画面が出ると思います.問題なければ"Accept All"を押しましょう.次にSteamVR/Scenes/にあるexampleシーンを開きます.Viveを装着して実行してみます.これでちゃんと動いていれば,UnityでViveを使う準備は整っています.

Cubeに触れるようにする

せっかくなので自分で新しくシーンを作ってそこでものに触れるようにします.まずは適当な名前で新しくシーンを作りましょう.タイトルにはCubeと書きましたがなんでもいいので,触りたいものに適当なColliderとRigidbodyをつけます.use gravityをオンにしておく場合は触りたいものが無限に落ちていかないようにPlaneなどを下に置いておきましょう.

ここまではViveと関係ないのです.Viveを使えるようにしましょう.ProjectビューのSteamVR/Prefabs/から[CameraRig]をSceneに配置します.[CameraRig]にはSteamVR_PlayAreaというコンポーネントがついており,これのPlayAreaを変えることで部屋のサイズをViveの設定と合わせます.部屋のサイズはSceneビュー上で表示されているため,オブジェクトを配置するときに便利です.[CameraRig]には3つの子オブジェクトがついており,その子オブジェクトの名前通り,それぞれ左のコントローラ,右のコントローラ,HMDを表しています.コントローラが触りたいものに当たるように当たり判定を付けていきます.コントローラのオブジェクトまたはコントローラの子オブジェクトにColliderとRigidbodyをつけます.Colliderについてはコントローラが小さいので半径0.1のSpehreColliderを付け,RigidbodyについてはUse Gravityをオフに,IsKinematicをオンにします.これで後はオブジェクトの位置を自分が移動できる範囲内に持ってきて準備完了です.実行するとViveのコントローラでオブジェクトを触れる(というよりは弾く)ようになったと思います.

おわりに

とりあえず画面上のオブジェクトに作用できるものができました.室内であまり動き回ると危ない環境で作ったので本当はオブジェクトの位置をリセットしたりするスクリプトを書きましたが,これくらいのものは1行も書くことなく作れます.もちろん「こんな挙動じゃ納得いかない!」となると思うのでそういう場合は色々調節したりすると良いと思います(雑).Unityのpositionは単位が1[m]なのでただCubeを2個重ねただけでもだいぶ迫力があるとかやはり視覚だけでも物が倒れてくると怖いとか,自分が手で物を動かしたというよりは何か超能力的な何かをしているような感覚があったとかいろいろ発見がありました.楽しいのでもっといじってみようと思います.