トマシープが学ぶ

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

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

 前回は環境を整えました。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);
}

ただボタンで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); 

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GoSousa: MonoBehaviour {
public GameObject yellow;
public GameObject pink;
public GameObject leo;
public GameObject camera1;
int a;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void 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);
}
Vector2 pt = OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad); ///タッチパッドの位置
if (pt.x < -0.5 && -0.5 < pt.y && pt.y < 0.5)///左側?
{
camera1.transform.position += new Vector3(-0.1f* Time.deltaTime, 0, 0 );
}
if (pt.x > 0.5 && -0.5 < pt.y && pt.y < 0.5)///右側?
{
camera1.transform.position += new Vector3(0.1f* Time.deltaTime, 0, 0 );
}
if (pt.y < -0.5 && -0.5 < pt.x && pt.x < 0.5)///下側?
{
camera1.transform.position += new Vector3(0, 0, -0.1f * Time.deltaTime);
}
if (pt.y > 0.5 && -0.5<pt.x && pt.x<0.5)///上側?
{
camera1.transform.position += new Vector3(0, 0, 0.1f * Time.deltaTime);
}
}
}
view raw GoSousa.cs hosted with ❤ by GitHub

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

 

最後に

不可解な動きをする・・・

twitter見てたら少なくとも二人ぐらいはOculusGoの開発記事を執筆途中みたいなのでそれを座して待つ。

 

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

qiita.com

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

 

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

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

www.dream-seed.com