前回は環境を整えました。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);
}
ただボタンで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);
なのでこんな感じで一応移動できました。
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); | |
} | |
} | |
} |
2018/6/3追記
今まで0にdeltaTimeをかけていたため上下移動が遅くなっていました!
訂正しました。
iPadに書いて考えた。
一応ちゃんと動いたと思う。