おもちゃラボ

Unityで遊びを作ってます

【Unity】JoyConを使ってSurvival ShooterをVR化する

f:id:nn_hokuson:20171114203601j:plain

色々な方が記事にされていますが、Nintendo SWITCHのJoyConはBLE通信を使っているのでPCやAndroidと簡単に接続することが出来ます。

www.taguchikun.com

そこで、今回はJoy-Con(ジョイコン)とGoogle Cardboardを使ってUnityの「Survival Shooter」をVR化する方法を紹介します。動画にするとこんな感じです。

f:id:nn_hokuson:20171114204640g:plain

Survival ShooterをVR化するまでの流れは次のようになります。

Joy-Conの入力をUnityで取得する

ジョイコンのデータをUnityで取得するにはInput Managerを使用します。メニューバーから「Edit」→「Project Settings」→「Input」を選択して下さい。

インスペクタの部分に入力軸が表示されるので、左右のジョイコン用に「Horizontal」と「Vertical」のデータを1組ずつ作ります。それぞれの項目を選択してから「Ctrl-D」でコピーして、それぞれ「Horizontal1」「Horizontal2」「Vertical1」「Vertical2」とリネームしてください。

f:id:nn_hokuson:20171110224457p:plain:w320

また、それぞれの軸の設定項目(Name, Axis, Joy Num)は次のように設定します。

Name Axis Joy Num
Horizontal1 6th axis(Joysticks) Joystick 1
Horizontal2 6th axis(Joysticks) Joystick 2
Vertical1 5th axis(Joysticks) Joystick 1
Vertical2 5th axis(Joysticks) Joystick 2


これでスクリプトからJoy-Conのアナログスティックの値をInput.GetAxisメソッドで受け取ることができるようになりました。このサンプルは左Joy-Conのアナログスティックの値を取得しています。

 float h = Input.GetAxis("Horizontal1");
 float v = Input.GetAxis("Vertical1");

ちなみに・・・

今回はJoy-ConのAxisを5thと6thに設定しましたが、環境によっては異なる値になることがあるようです。この場合はアセット「Controller Tester」を使うことで、Joy-ConのどのボタンがUnityのどの軸に割り振られているかを、簡単に確認できますよ。


Survival ShooterでJoy-conの入力を受け取る

Androidで実行したときにプレイヤの移動は、右ジョイコンのアナログスティック、プレイヤの回転は左ジョイコンのアナログスティックで操作できるようにしましょう。また、銃を撃つにはAボタンを使用します。

まずは、Asset Storeから「Survival Shooter」をダウンロードしましょう。

アセットがダウンロードできたら、Assets/_Complete-Game/Scripts/Player/PlayeMovement.csを開きFixedUpdateメソッドを次のように修正してください。

void FixedUpdate ()
{
        // Store the input axes.
        float h = Input.GetAxis("Horizontal1");
        float v = Input.GetAxis("Vertical1");
        float h2 = Input.GetAxis("Horizontal2");

        // Move the player around the scene.
        Move (-h, -v);

        // Turn the player to face the mouse cursor.
        //Turning ();
        transform.Rotate (0, h2*4, 0);

        // Animate the player.
        Animating (h, v);
}

ここでは、先程InputManagerで設定したHorizontalとVerticalの入力軸を使用して、Joy-Conのアナログスティックの入力を取得しています。
また、プレイヤの回転は左ジョイコンのアナログスティックの傾きに応じて、Rotateメソッドで回転しています。従来使用しているTurnメソッドはコメントアウトしています。

Androidの実機で動作確認

Androidで動作確認するためには、まずJoy-conとAndroidをBluetoothで接続する必要があります。Androidの「設定」→「Bluetooth」を選択してください。

f:id:nn_hokuson:20171111081650j:plain:w200

この状態で、ジョイコンのペアリングボタンを3秒程度押してください。Joy-conのゲージが点滅し始めると、Androidの端末にJoy-con(R)と候補が表示されるので、タッチして接続します。同様の手順で左Joy-Conも接続してください。

f:id:nn_hokuson:20171111081742j:plain:w200

現在はJoy-conとAndroidが接続が完了しても、Joy-Con側のインジゲータの点滅は消えないようです・・・これでジョイコンとAndroidがBLEで接続されたので、Survival Shooterのアプリをインストールして動くか試してみましょう!

f:id:nn_hokuson:20171114200042j:plain

ちなみに・・・現在(2017/11)の段階では、iPhone(iOS)とジョイコンはBLEで接続できない仕様になっているようです。

Google Cardboardを使ってSurvival ShooterをVR化する

せっかくSurvival ShooterがJoy-conで遊べるようになったことですので、最後にVRでも遊べるようにしてみましょう。

今回はGoogle Cardboardを使ってVR化してみましょう。Unity2017付近からVRの開発環境がUnityと統合されたため、簡単にVRのゲームを作る事ができるようになっています。

nn-hokuson.hatenablog.com

ここで変更する項目は、入力とカメラのみになります。Androidで遊ぶ場合、プレイヤの回転はJoy-Conの右アナログスティックで行っていましたが、VRの場合はジャイロで自動的に計算されるので、不要になります。PlayerMovement.csの次の行をコメントアウトしておきましょう。

void FixedUpdate ()
{
        // float h2 = Input.GetAxis("Horizontal2");
           ・・・・・
       // transform.Rotate (0, h2*4, 0);
}


いったんMain Cameraの座標と姿勢をリセットしてから、カメラがプレイヤの視点に来るように移動させて下さい。

f:id:nn_hokuson:20171114203524j:plain

また、Projectionを「Perspective」、Field of Viewを「70」に設定します。

f:id:nn_hokuson:20171114203253p:plain:w400

Survival Shooterではプレイヤの向いている方向に銃を撃ちます。VRの場合はカメラの向いている方向に銃を撃つように、プレイヤをカメラの子要素にします。ヒエラルキーウインドウでMain CameraにPlayerをドラッグ&ドロップして下さい。

f:id:nn_hokuson:20171113070312p:plain:w300

最後にUnityでAndroidビルドします。いまのままでは通常の画面で出力されてしまうので、Player SettingsでVR映像が出力されるように設定します。

メニューバーから「FIle」→「Build Settings」を選択して下さい。PlattformをAndroidに変更後、Build Settingsの画面でPlayer Settingsボタンを押します。

f:id:nn_hokuson:20171113070815j:plain:w400

Unity2017.2以降はインスペクタのXR Settingsを選択し、Virtual Reality Supportedにチェックを入れ、Virtual Reality SDKからGoogle Cardboardを選択します。 (Unity2017.1以前はOther Settingsの中にVirtual Reality Supportedの項目があります)

f:id:nn_hokuson:20171113071055p:plain:w400

最後に「Bundle identifier」を任意の文字列に修正してから、「Build Settings」ウインドウで「Build & Run」をクリックして実機にインストールしてください

f:id:nn_hokuson:20171114202957j:plain

これで、ようやくGoogle CardobardとJoy-Conを使ってSurvival ShooterをVR化することができました。長かったですね〜^^。ぜひ一度実際に遊んでみて下さい!