「VRエンジニア養成読本」でUnity+Google VR SDKでCardboard向けにVRアプリをつくる初心者向けの記事を書きました - ReDo

2017年4月11日

「VRエンジニア養成読本」でUnity+Google VR SDKでCardboard向けにVRアプリをつくる初心者向けの記事を書きました

本日4/11が発売日ということで、少し補足情報を述べておきます。

◯書籍全体について

vr-yousei-mokuji.jpg

技術評論社の公式ページには概要と目次が両方掲載されていますが、タイトルはVRでばっさり、表紙からVRなのにHoloLensとか、概要もゆるふわで掴みづらいので、目次を確認してください。

・「巻頭特集」として、既存VR/MRデバイスと、近い将来リリースされるハードなどについて、@yamashin0429さんが書いています。
・「特集1」として、VRアプリ開発初心者向けに、「Cardboard向けに壁打ちゲームアプリの作り方」・「Oculus向けにユニティちゃんをよびだすアプリの作り方」・「とくにターゲットは限定しないQuaternion、角度と頭・視線の話」をそれぞれ私@youten_redo@Somniumさん、@oukaichimonさんが書いています。
・「特集2」はもう少し実践的な話として、「プロ生ちゃんとロッカーに閉じ込められる「至近距離ガールVR」のデザイン」について@kohki_nakajiさんと@mementomori72さんが、「いまいる場所の把握や方向をわかりやすくする空間設計」について@tsuhirさんが書いています。
・「一般記事」は1つだけしかなくてもう特集とか一般とかの分類がよくわかりませんが、360度動画・VR動画の特徴について初心者向けの話を@kohki_nakajiさんが書いています。
・「特集3」はHoloLensそのものの話と開発入門(むしろ開発環境紹介)を@yuujiiさんが書いています。
・「特集4」としてVRに関連した3D技術の応用事例として2記事、両人の持ちネタである「@Somniumさんのボクセル変換と3D出力の話」と「@n_ryotaさんのUnityでProcessingっぽいことができるようしたUnicessingを使ったVRなジェネラティブアートの話」が書かれています。

◯私が書いた「特集1 Unityで作る 入門! VRアプリ開発」内、「第1章 Google CardboardとAndroidでスタート はじめてのVRアプリ」について

macOS/Windows対応でゼロからJava(JDK)・Androidのビルドツール・Unity(5.5最新を想定)をインストールして、Google VR SDKをセットアップして試したのち、Cardboard向けに壁打ちゲームをスクリプト込みで作成する手順を詰め込みました。
Daydreamの話を書こうと思っていたところ、「マニアックなものや上級者向けのコンテンツばかりではなく、初心者向けのものも入れ込みたい」という要望を受けて書いたもののため、VRアプリ開発の初心者向けに(おそらく)なっています。

・Unity 5.6対応の話

記事はUnity5.5で書いたのですが、最新のUnity5.6ではUnityのVRへのネイティブ対応の影響でそのままでは動作しません。以下の2点、差分対応をお願いします。

1. 「PlayerSettings」の「Other Settings」中、 「Virtual Reality Supported」のチェックをONにして、「Virtual Reality SDKs」に「Cardboard」を追加してください。

unity560-gvr-cardboard-01.png

2. Google VR SDKのAPIをUnityのVR APIに変更する必要があります。(Google VR SDK中にifdefで分岐があるとのことです

頭の向きを取得して自機(バー)の位置を変更するMeMain.csを以下の様に変更してください。詳細はコメントを参照願います。

void Update ()
{
    #if UNITY_EDITOR
    // キーボードによる自機の移動(Unityエディター上限定のデバッグ用)
    if (Input.GetKey (KeyCode.LeftArrow)) { // ←キー
        if (-MAX_ME_X < transform.position.x) {
            transform.Translate (Vector3.left * 0.3f); // 左へ            
        } 
    }
    if (Input.GetKey (KeyCode.RightArrow)) { // →キー
        if (transform.position.x < MAX_ME_X) {
            transform.Translate (Vector3.right * 0.3f); // 右へ
        }
    }
    #else // not UNITY_EDITOR
    
    // Cardboard (Google VR)での首振りによる自機の移動
    #if UNITY_5_6_OR_NEWER
    // Unity 5.6以降の場合はUnityネイティブのVR対応を利用することになるため、
    // PlayerSettingsのVirtual Reality SupportedチェックをONにして、
    // Cardboardコンポーネントを追加する必要があります。
    Quaternion head = InputTracking.GetLocalRotation(VRNode.Head);
    #else // 5.5 or older
    Quaternion head = GvrViewer.Instance.HeadPose.Orientation;
    #endif
    
    if (head != null) {
        float posX = Mathf.Clamp (head.y * 20.0f, -MAX_ME_X, MAX_ME_X);
        // move bar
        transform.position = new Vector3 (
            posX, // x
            transform.position.y, // y
            transform.position.z); // z
    }
    #endif
}

Unity5.6に対応した記事内のアプリのUnityプロジェクトは以下のGitHubリポジトリに配置しました。
問題があったら他のスペースに移動されるかもしれませんがよければ参考にしてください。

youten/Yousei-HelloCardboardVR
https://github.com/youten/Yousei-HelloCardboardVR

・Android SDK ManagerのGUIとCUIの話

Android SDKと必要なコンポーネントのダウンロードについて、GUIベースで記載してしまいましたが、CUI版のコマンドラインツールとしてのsdkmanagerのみが同梱されるように変更になっています。
コマンドラインツールをダウンロードしてzipを展開するとtoolsフォルダがでてきますが、tools/bin配下のsdkmanagerバイナリ(Windowsだとsdkmanager.exeのはず)で以下のようなリストアップ・ダウンロード(インストール)コマンドを実施してください。

tools/bin/sdkmanager --list
tools/bin/sdkmanager "platform-tools" "build-tools;25.0.3" "platforms;android-25"

# 2GB近いダウンロードとか、展開後のディスクスペースに余裕がある方はAndroid StudioのSDK入りをダウンロードしてしまっても概ねなんとかなりますが、記事中にも記載している通り、色々便利なため、adbコマンドなどパスを通してCUI側のツールを使うことをオススメしておきます:)

◯余談
Daydreamについて書きたかったのにCardboardについて書くことになったので「CardboardとDaydreamについて」という趣味丸出しの節がコラム枠で含まれています。購入された方は僕の顔を思い出しながら読んでやってください。


P.S.
冬休み明けに初稿、3月に入って涙目の全スクショ撮り直しで4/11発売のこの書籍と、ノリノリで4/1リリースのUnity5.6や4/5の12.1話ネタまでぶちこんだ先日の技術書典2向けの4/9頒布の同人誌。時間というものはほんとに強大な敵だな、と感じています。

コメント(2)

早速、買いますわー研究室で輪読します

No.2265のGaeruさんのコメントへの返信

やったー、ありがとー

コメントする