にゃーんになりたい。

Pepperと仲良くなりたい。

ThetaV + OculusRift でストリーミング & コントローラーの座標取得

↓のアップデート版

ThetaV + Unity + OculusRift でストリーミング - にゃーんになりたい。

環境 Windows10

Unity2019.2.10f1 + UnityHub

UnityHub で新規作成

Oculus で遊ぶので Asset Store から Oculus Integration を Upgrage & Import

f:id:wanttobenya-n:20200124154404p:plain

ポップアップの Import ボタンを押す。

f:id:wanttobenya-n:20200124154415p:plain  

左上の File -> Build Settings を開いて左下の Player Settings

XR Settings の Virtual Reality Supported のチェックを入れる

Virtual Reality SDKs の一番上を Oculus に

f:id:wanttobenya-n:20200124154553p:plain

コントローラーが手の形で VR に出したい

左下、Project タブの Assets に Oculus が増えているはずなので

Assets -> Oculus -> SampleFramework -> Usage から CustomHands をダブルクリック

f:id:wanttobenya-n:20200124154854p:plain

左上 Hierarchy タブの Static -> Ground はいらないので削除

f:id:wanttobenya-n:20200124155120p:plain  

No hack, no work • UnityとOculusで360度パノラマ全天周動画を見る方法【無料編】

から Sphere100.fbx をダウンロード

下部の Assets のところに D & D してから Hierarchy に D & D

右側 Inspector タブから Scale を 100 x 100 x 100 に変更

f:id:wanttobenya-n:20200124155842p:plain

Assets -> Create -> C# Script から新規スクリプトを作成、タイトルを WebCamDrawer に変更

f:id:wanttobenya-n:20200124160255p:plain 

ダブルクリックすると Visual Studio が起動

ThetaV からのストリーミング映像を球面内部に流し込むために

【THETA V】ライブストリーミングの映像をUnityで表示 - Qiita

から WebCamDrawer.cs の内容をコピー

 f:id:wanttobenya-n:20200124160255p:plain

保存したら Visual Studio を閉じて、いまつくった .cs ファイルを Hierarchy の Sphere100 にアタッチ (D & D)

Inspector タブで見ると Web Cam Drawer が増えている

f:id:wanttobenya-n:20200124160650p:plain

コントローラーの座標を取得する C# スクリプトをかく

さっきと同じ要領で新規スクリプトを作成、とりあえず左手をつくるのでファイル名は ControllerLeft に変更

 Visual Studio を起動させて

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.VR;
using System.IO;

public class ControllerLeft : MonoBehaviour
{
    private float timetext;

    void Start()
    {
        //timetext = 0;
    }

    public OVRInput.Controller controller; // the controller to instantiate the object at

    void Update()
    {
        transform.localPosition = OVRInput.GetLocalControllerPosition(controller);
        transform.localRotation = OVRInput.GetLocalControllerRotation(controller);
        //Debug.Log(transform.localPosition);
        StreamWriter sw = new StreamWriter("./LogDataLeft.csv", true); //true=追記 false=上書き
        timetext += Time.deltaTime;
        sw.WriteLine(string.Format("{0},{1},{2},{3}", timetext.ToString(), transform.localPosition.x, transform.localPosition.y, transform.localPosition.z));
        sw.Flush();
        sw.Close();
    }
}

で LogDataLeft.csv に時間(ms)とxyz座標を出力

同様に ControllerRight.cs を作って

public class ControllerRight : MonoBehaviour

StreamWriter sw = new StreamWriter("./LogDataRight.csv", true); //true=追記 false=上書き

だけ書き換え

.cs ファイルを利用するために Hierarchy タブの Create -> Create Empty から GameObject 作成、名前はてきとう

GameObject にさっきつくった ControllerLeft と ControllerRight をアタッチ

Inspector タブで見ると Controller でプルダウンがあるので、それぞれ L Touch, R Touch にする

f:id:wanttobenya-n:20200124162253p:plain

これで Theta V のストリーミングを起動してから Unity 中央の再生ボタンを押すとストリーミングしながら動かしたコントローラーの座標が csv に出力される