前回は環境を整えました。Build and Runをすると割とすぐにアプリが表示されます。
今回はコンテンツ作りの基礎となるところを学びたいです。
テレポート移動、コントローラー表示、クリック反応、ポインタをやりたい。
これができたらあとは大概どんなのでもできそう。
GoはGearVRが元になっているから、GearVRのアプリがほぼそのまま移植できるらしい。
Goの情報は少ないけど、ないぶんはGreaVRで調べればいいのかな?
コントローラー表示
前回このスライドを参考にコントローラー表示を試みました。
このアセットを入れたらOculus>VR>Prefabsの中にTracked Remoteというコントローラーモデルが入っていました。
調べたらOVRCameraRigの下のRightHandAnchoの下にぽいってすれば良さそうです。(そんな気はしてた)
無事動きました!簡単!
入力
Update関数にこんな感じで書いたら取れました。
if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger))
{
////トリガー押されたら
yellow.SetActive(false);
}if (OVRInput.GetDown(OVRInput.Button.Back))
{
///戻るボタン押されたら
pink.SetActive(false);
}
if (OVRInput.GetDown(OVRInput.Button.PrimaryTouchpad))
{
////タッチパッド押されたらpink.SetActive(true);
}
if (OVRInput.GetDown(OVRInput.Touch.PrimaryTouchpad))
{
///タッチパッド触れられたら
//pink.SetActive(false);
}
GetDown()をGet()に変えると押しっぱなしの状態でtrue、GetUp()でリリースの瞬間にtrueになります。
もどるボタンを押したときの反応はストアに出す場合、何かしら設定することを推奨されているそうです。
メインメニューなど、これ以上階層を上がれない場合 「Oculus Homeに戻りますか?」のシステムダイアログ表示を出す(ダイアログの自前での実装は避けてください)。 Unityの場合、OVRManager.PlatformUIConfirmQuit(); を使用
OVRManager.PlatformUIConfirmQuit();を使ったらホームに戻った。
ゲーム内でUIが出るんじゃないんかい!
ただボタンでsetactive(true)と(false)を切り替えても反応しない。消えたら消えただけで終わり。これはわたしのスクリプトが悪い?
if (OVRInput.GetDown(OVRInput.Button.Back))
{
///戻るボタン押されたら
pink.SetActive(false);
}
if (OVRInput.GetDown(OVRInput.Button.PrimaryTouchpad))
{
////タッチパッド押されたらpink.SetActive(true);
}
これでも反応しない
if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger))
{
////トリガー押されたら
if (a == 1) {
yellow.SetActive(false);
a = 0;
}
else
{
yellow.SetActive(true);
a = 1;
}}
参考
OVRInput (GearVR + Unity) のまとめ | TaoVisor
公式のこのページに部位の名前が書いてあります。
また、この記事の「④GearVRコントローラーのトリガーやタッチパッドの入力を受け取る」をそのままコピペしてもトリガーは動きました。
GearVRの記事にあるif (OVRInput.GetDown(OVRInput.Button.DpadLeft))とかはGearVRのHMDの横のパッドでの操作時の名前なので動きません。私は間違えました。
タッチパッドで移動
タッチパッドの触れている位置はこんな感じでとれるようです。
Vector2 pt = OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad);
なのでこんな感じで一応移動できました。
2018/6/3追記
今まで0にdeltaTimeをかけていたため上下移動が遅くなっていました!
訂正しました。
iPadに書いて考えた。
一応ちゃんと動いたと思う。
最初にタッチパッドで移動した後、別のボタンを押して、またタッチパッドを押しても反応しない。
なんでええええ
参考記事
Oculus Utilities for Unity | Developer Center | Oculus
ポインタ
サンプルシーンのUIがポインタでした。頭の動きで選ぶやつ。
コントローラーで指さすにはこの記事の「コントローラーで指して選択する」を参考にしたらいいのかな?
この記事ではUnityのVRsampleのVRcameraUIを使っています。
注意としてVRsampleはインポートするとbuild一覧にvrsampleのシーンが勝手に設定されてしまうので、そのチェックを外して自分の作ったシーンを入れないといけないです。
私も一回引っかかりました。
記事通りにやったらできました。
VRsampleのCameraのVRCameraUI部分をHandAnchorの下において、
HandAnchorに3つのスクリプトを付けて設定。
CubeにVR Interactive Itemと色が変わる
レーザーはLineRenderで自分で作りました。
長さとかは適当なので、ちゃんと対象とコントローラーを結ぶ線を出すにはどうするのかよくわかりません。
こちらはコードも書いているっぽいです。
詳しくも無いけどこっちの記事で使っています。
uGUI
こちらの記事通りにCanvasやEventsystemを設定したらuGUIをクリックできるようになりました。
Oculus/VR/Scenes/UIシーンのOVR GazePointerをプレハブ化して使えるようにします。
これのRay transformを右手のコントローラーにします。
すると右手からポインターが出ます。
これを頭にすると、頭の動きで選択する形になります。
そしてCanvasを作り、こんな感じにします。
Graphic Raycasterを消して、OVRRaycasterを代わりにつけ、Blocking ObjectsをAllにするそうです。
また、EventSystemにからStandalone Input Moduleを消し、OVR InputModuleを付けます。ここのRay TransformもRightHandAnchorにしました。(よくわかってない)
2018/6/20追記
Oculus公式ブログで別の方法?スクリプト?が公開されているそうです。
日本語で解説してくださっている記事があります。
そのうちOculusIntegrationに統合されるらしい。ラインが自然に出せる??
ビルド
ビルドしたものは提供元不明のところで遊べる。
PackageNameが同じだと別のプロジェクトでも上書きされてしまう?ので、変えたほうがいいと思う。(たぶん)
参考
input系書かれていました。私の前の記事も参考にしてもらってる!
Oculus Goのケースが売っていました。
無印のメイクボックスは1490円