トマシープが学ぶ

Unity/VR好きのミーハー初心者 記事内容は自分用のメモ。何も求めないで

Oculus Go開発【コントローラー表示、クリック反応、移動、ポインタ、uGUI】

前回は環境を整えました。Build and Runをすると割とすぐにアプリが表示されます。

bibinbaleo.hatenablog.com

今回はコンテンツ作りの基礎となるところを学びたいです。

テレポート移動、コントローラー表示、クリック反応、ポインタをやりたい。

これができたらあとは大概どんなのでもできそう。

GoはGearVRが元になっているから、GearVRのアプリがほぼそのまま移植できるらしい。

Goの情報は少ないけど、ないぶんはGreaVRで調べればいいのかな?

コントローラー表示

前回このスライドを参考にコントローラー表示を試みました。

www.slideshare.net

このアセットを入れたらOculus>VR>Prefabsの中にTracked Remoteというコントローラーモデルが入っていました。

f:id:bibinbaleo:20180513210942p:plain

調べたらOVRCameraRigの下のRightHandAnchoの下にぽいってすれば良さそうです。(そんな気はしてた)

www.noshimemo.com

f:id:bibinbaleo:20180514122659p:plain

無事動きました!簡単!

f:id:bibinbaleo:20180514171303p:plain

入力

Oculus Goのコントローラ入力の取得まとめ

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になります。

 

もどるボタンを押したときの反応はストアに出す場合、何かしら設定することを推奨されているそうです。

developer.oculus.com

メインメニューなど、これ以上階層を上がれない場合 「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

公式のこのページに部位の名前が書いてあります。

developer.oculus.com

f:id:bibinbaleo:20180514151445p:plain

 

また、この記事の「④GearVRコントローラーのトリガーやタッチパッドの入力を受け取る」をそのままコピペしてもトリガーは動きました。

qiita.com

GearVRの記事にあるif (OVRInput.GetDown(OVRInput.Button.DpadLeft))とかはGearVRのHMDの横のパッドでの操作時の名前なので動きません。私は間違えました。

f:id:bibinbaleo:20180514153349p:plain

タッチパッドで移動

タッチパッドの触れている位置はこんな感じでとれるようです。

Vector2 pt = OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad); 

なのでこんな感じで一応移動できました。

gist.github.com

2018/6/3追記

今まで0にdeltaTimeをかけていたため上下移動が遅くなっていました!

訂正しました。

iPadに書いて考えた。

f:id:bibinbaleo:20180514172236p:plain

 一応ちゃんと動いたと思う。

f:id:bibinbaleo:20180514165820g:plain

 

最初にタッチパッドで移動した後、別のボタンを押して、またタッチパッドを押しても反応しない。

なんでええええ

参考記事

news.mynavi.jp

 

 

Oculus Utilities for Unity | Developer Center | Oculus

framesynthesis.jp

ポインタ

f:id:bibinbaleo:20180514170026p:plain

サンプルシーンのUIがポインタでした。頭の動きで選ぶやつ。

f:id:bibinbaleo:20180514170335j:plain

コントローラーで指さすにはこの記事の「コントローラーで指して選択する」を参考にしたらいいのかな?

qiita.com

この記事ではUnityのVRsampleのVRcameraUIを使っています。

注意としてVRsampleはインポートするとbuild一覧にvrsampleのシーンが勝手に設定されてしまうので、そのチェックを外して自分の作ったシーンを入れないといけないです。
私も一回引っかかりました。

 

記事通りにやったらできました。

f:id:bibinbaleo:20180527120957g:plain

VRsampleのCameraのVRCameraUI部分をHandAnchorの下において、

f:id:bibinbaleo:20180527120339p:plain

f:id:bibinbaleo:20180527114418p:plain

HandAnchorに3つのスクリプトを付けて設定。

f:id:bibinbaleo:20180527114424p:plain

CubeにVR Interactive Itemと色が変わる

f:id:bibinbaleo:20180527114420p:plain

レーザーはLineRenderで自分で作りました。

長さとかは適当なので、ちゃんと対象とコントローラーを結ぶ線を出すにはどうするのかよくわかりません。

こちらはコードも書いているっぽいです。

fantom1x.blog130.fc2.com

詳しくも無いけどこっちの記事で使っています。

bibinbaleo.hatenablog.com

uGUI

こちらの記事通りにCanvasやEventsystemを設定したらuGUIをクリックできるようになりました。

qiita.com

f:id:bibinbaleo:20180612191108p:plain

Oculus/VR/Scenes/UIシーンのOVR GazePointerをプレハブ化して使えるようにします。

f:id:bibinbaleo:20180609123746p:plain

これのRay transformを右手のコントローラーにします。

すると右手からポインターが出ます。

これを頭にすると、頭の動きで選択する形になります。

f:id:bibinbaleo:20180609123744p:plain

 

そしてCanvasを作り、こんな感じにします。

f:id:bibinbaleo:20180609124014p:plain

Graphic Raycaster消して、OVRRaycasterを代わりにつけ、Blocking ObjectsAllにするそうです。

f:id:bibinbaleo:20180609124017p:plain

また、EventSystemにからStandalone Input Moduleを消し、OVR InputModuleを付けます。ここのRay TransformもRightHandAnchorにしました。(よくわかってない)

f:id:bibinbaleo:20180609124238p:plain

 

2018/6/20追記

Oculus公式ブログで別の方法?スクリプト?が公開されているそうです。

developer.oculus.com

日本語で解説してくださっている記事があります。

scrapbox.io

そのうちOculusIntegrationに統合されるらしい。ラインが自然に出せる?? 

ビルド

ビルドしたものは提供元不明のところで遊べる。

f:id:bibinbaleo:20180619121711p:plain

PackageNameが同じだと別のプロジェクトでも上書きされてしまう?ので、変えたほうがいいと思う。(たぶん)

f:id:bibinbaleo:20180619120803p:plain

参考 

framesynthesis.jp

input系書かれていました。私の前の記事も参考にしてもらってる!

qiita.com

Oculus Goのコントローラ入力の取得まとめ

 


Oculus Goのケースが売っていました。

無印のメイクボックスは1490円

www.dream-seed.com