cancel
Showing results for 
Search instead for 
Did you mean: 

付属品のコントローラーの事で

rururin
Level 4
○使用物
カメラ:RICHO THETA S
unity:Unity 5.4.1
oculusrift:「このURLの物」https://www3.oculus.com/en-us/rift/

unity内にスフィアを配置して、そのスフィアに全方位カメラで撮影した映像を流す事には成功しました。

次に付属品のxboxoneのコントローラーで画面内を十字キー、アナログスティックを使用して
移動できるようにしたいのですが、どうしたら動かせるように出来ますか?

下記のURLでのところで試したのですが上手くいきませんでした・・・

2 ACCEPTED SOLUTIONS

Accepted Solutions

Anonymous
Not applicable
もし上記のスクリプトを一字一句そのままで動かしているのだとすると
OVRInput.Get(OVRInput.Button.DpadUp)    # 上キー
OVRInput.Get(OVRInput.Button.DpadLeft)  # 左キー
OVRInput.Get(OVRInput.Button.DpadRight) # 右キー
OVRInput.Get(OVRInput.Button.DpadDown)  # 下キー
この部分は「ボタンが押されているかどうかの情報を取得する」までは行っていますが、「その情報を使って何をするか」の部分の記述が無いため、何も起きない、という事になります。「もしボタンが押されている場合に何かをする」という場合は例えば、
void Update () {
if (OVRInput.Get(OVRInput.Button.DpadUp))
{
transform.Translate(Vector3.forward * Time.deltaTime);
}
}

といったようにif文で囲み、その中に処理を書くとボタン押下時に実行されるようになります。(上記は十字キー上を押した時に前方に進むのみですが、他の方向に関しても同様です)
また、UnityではStart()は実行開始直後の1回だけ実行され、Update()は毎フレーム繰り返し実行されるので、ボタン判定をStart()に入れると最初の一瞬しかボタン判定が行われません。常時操作可能にするのであれば、Update()に入れておくべき部分ですね。
このあたりはVR開発と言うよりは、Unity自体の基礎となってきますので、ここから先はUnityの書籍や、Unity関連の掲示板を調べて見るとより詳しい話が見つかると思います。FacebookのUnityユーザー助け合い所なども良いかもしれません。
https://www.facebook.com/groups/unityuserj/?fref=ts

View solution in original post

rururin
Level 4
詳しく回答していただき本当にありがとうございます!

参考にさせていただきがんばってみます!
もしむずかしければご紹介いただいたところに聞いてみます・・・

View solution in original post

5 REPLIES 5

Anonymous
Not applicable
Rift/Gear VRの場合、リモコン・タッチパッド・ゲームパッド・Touch等の各種入力デバイスをまとめて扱えるOVRInputというクラスがありますので、そちらを使った方がいいかもしれません。入力のとり方に関しては以下が参考になります:

https://developer3.oculus.com/documentation/game-engines/latest/concepts/unity-ovrinput/
http://taovisor.com/news/ovrinput-gearvr-unity/
http://portaltan.hatenablog.com/entry/2016/04/01/094005
http://magicbullet.hatenablog.jp/entry/oculusutilitesforunity_gamepad

ただ、全天球動画の再生とカメラ位置の移動は普通は同時には行いません。ポリゴンで作られた3Dモデルで作られた環境であれば、カメラを移動するとちゃんとその分自分が3D環境内を動いたように感じられますが、全天球動画はあくまで「特定の地点で撮影した全天球動画が貼られた球体」の中なので、動画の環境の中を動いているというよりは、球体の壁が近づいたり遠ざかったりしているように感じられるかと思います。

rururin
Level 4
回答ありがとうございます。
早速試してみます

rururin
Level 4
参考にさせていただいたのですが、ちょっと質問よろしいでしょうか?

こちらのサイトを参考にしました。

C#script


using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {

// Use this for initialization
void Start () {
        bool curBut = OVRInput.Get(OVRInput.Button.One)
            if (OVRInput.GetDown(OVRInput.Button.One))
        {
            // ボタンが押された場合の処理
        }
        OVRInput.Get(OVRInput.Button.DpadUp)    # 上キー
        OVRInput.Get(OVRInput.Button.DpadLeft)  # 左キー
        OVRInput.Get(OVRInput.Button.DpadRight) # 右キー
        OVRInput.Get(OVRInput.Button.DpadDown)  # 下キー
    }
if (OVRInput.GetUp(OVRInput.Button.One))
{
// ボタンが離された場合の処理
}
// Update is called once per frame
void Update () {
}
}





こんな感じで入力してみたのですが、やはり、というか動きません・・・

OVRInputをどう入力するか教えてもらってもいいでしょうか・・・
まだまだプログラミングは初心者ですので・・・お手間を取らせてしまいすいません・・・

Anonymous
Not applicable
もし上記のスクリプトを一字一句そのままで動かしているのだとすると
OVRInput.Get(OVRInput.Button.DpadUp)    # 上キー
OVRInput.Get(OVRInput.Button.DpadLeft)  # 左キー
OVRInput.Get(OVRInput.Button.DpadRight) # 右キー
OVRInput.Get(OVRInput.Button.DpadDown)  # 下キー
この部分は「ボタンが押されているかどうかの情報を取得する」までは行っていますが、「その情報を使って何をするか」の部分の記述が無いため、何も起きない、という事になります。「もしボタンが押されている場合に何かをする」という場合は例えば、
void Update () {
if (OVRInput.Get(OVRInput.Button.DpadUp))
{
transform.Translate(Vector3.forward * Time.deltaTime);
}
}

といったようにif文で囲み、その中に処理を書くとボタン押下時に実行されるようになります。(上記は十字キー上を押した時に前方に進むのみですが、他の方向に関しても同様です)
また、UnityではStart()は実行開始直後の1回だけ実行され、Update()は毎フレーム繰り返し実行されるので、ボタン判定をStart()に入れると最初の一瞬しかボタン判定が行われません。常時操作可能にするのであれば、Update()に入れておくべき部分ですね。
このあたりはVR開発と言うよりは、Unity自体の基礎となってきますので、ここから先はUnityの書籍や、Unity関連の掲示板を調べて見るとより詳しい話が見つかると思います。FacebookのUnityユーザー助け合い所なども良いかもしれません。
https://www.facebook.com/groups/unityuserj/?fref=ts

rururin
Level 4
詳しく回答していただき本当にありがとうございます!

参考にさせていただきがんばってみます!
もしむずかしければご紹介いただいたところに聞いてみます・・・