いーじすの戯言

戯言を書く予定です。しょうもなさ全開

UnityでVRで頑張って作る(1)

やっていく
前記事
aegis.hatenablog.jp


それにしても頭の悪そうなタイトルである

環境

MacBook Pro(13, 2018)
Unity 2019.1.8.f1

デバッグ環境
iPhone 5S
iOS12.2

ビルド環境
iPhone SE
iOS13.1.2

とりあえず、普通に3Dでプロジェクトを作成し、
UnityにはVRの機能が標準であるらしいので調べてみると、

unity3d.com

公式のチュートリアルもあったので読んでみた

Unity は特定の VRバイスのためにビルトインサポートを導入しました。この手引きは Oculus 社製の VRバイス ― 特に、Oculus Rift Development Kit 2 (DK2) と コンシューマ版 Gear VR (Samsung Galaxy S6、S6 Edge、S6 Edge+、Note 5 ハンドセット用のモバイルヘッドセット) ― に焦点を当てています。

このドキュメントはすべての VR HMD に関連した内容を提供します。詳細に関しては使用するVR HMDのドキュメントをご覧ください。

うるせぇ!!!HMD持ってないんじゃ!!!!

...はい、別の方法を検証しましょう
そこで上がるのがスマホのジャイロセンサをトラッキングに使って、
映像もそのまま画面に出力するというもの

arvr.google.com

このGoogle CardBoardを使う
どうやらGoogleさんは公式でSDKを出してくれているようですが、今回はDive Unity Pluginというものを使う
こちらの記事を参考にしました

freesworder.net

この方の記事と同様にDive_Cameraをヒエラルキーに入れて、
f:id:u1218:20191015233116p:plain

メインカメラを消して、ジャイロのスクリプトを書く

public class jailo : MonoBehaviour
{
    Quaternion currentGyro;

    void Start()
    {
        Input.gyro.enabled = true;
    }

    void Update()
    {
        var rotRH = Input.gyro.attitude;
        var rot = new Quaternion(-rotRH.x, -rotRH.z, -rotRH.y, rotRH.w) * Quaternion.Euler(90f, 0f, 0f);

        transform.localRotation = rot;
    }

    void OnGUI()
    {
        var g = Input.gyro.attitude;
        GUILayout.Label(g.x.ToString());
        GUILayout.Label(g.y.ToString());

        GUILayout.Label(g.z.ToString());
        GUILayout.Label(g.w.ToString());

    }
}

gyroの綴りが違うのはご愛嬌(は?)

とりあえずカメラではなく、適当なキューブにアタッチして試します
f:id:u1218:20191015233227p:plain

動いたのでカメラにアタッチ

位置関係とかを取るために、droidくんを配置
f:id:u1218:20191015233227p:plain

スクリーンショット
f:id:u1218:20191015235316p:plain

ちゃんと右目カメラと左目カメラが重なってますね

実を言うと別に二眼である意味はないのですが、持っているダンボーHMDで、端末サイズと端子の位置的に
二眼のcardboardがいいなって言う話です。

これでヘッドトラッキングができました。

では

次の記事
aegis.hatenablog.jp