Oculus Rift対応のソーシャルVRを作る その1 Photon #アセットアドカレ

この記事は Unity Assets Advent Calendar 2015 3日目の記事になります。

Toyboxの体験はただVR空間で会えることだけで面白いという、今まで分かりきっていたことだとしても、実際にVRの中に持っていけるものが増えた体験をすることで更にVRでコミュニケーションおもしれええ!を強烈に覚えることができました。

以前にもGalaGunOnlineで100人同時プレイ可能なVR MMOFPSを作ったり

VR Jam 2015はオンラインでTwitterから気軽に利用可能なVR SNSを作ったり、VRは人と人とのコミュニケーションの場としてインフラとなり得ると確信しています。

ということで、今回はVRでボイスチャットを実現しましょう。前編

Photon Unity Networking Free

https://www.assetstore.unity3d.com/jp/#!/content/1786

開発環境

  • Unity 5.2.1p2
  • Oculus Runtime 0.7
  • Photon 1.64.2

Unityでネットワークについての補足

以前作成したGalaGunOnlineでは同様にPhotonを、VR Jamで作成したSakuramiは自分で鯖を用意するBoltでAzure上にZeus(Boltのマスタ鯖)を構築してAzure上にマスタとスレーブ、音声用にも別途似た構成で鯖立ててネットワークを構築していました。(Boltについては現在Photonファミリーに組み込まれPhoton Boltになっています。)

他にもオンラインでのコミュニケーションを実現する方法としてはWebRTCを利用することでWebVRでの展開もイケます。

Photon Voiceというのが今年のアップデートで予定されているそうで、これを使えばDFVoiceを使わずとも実現が出来ると思われます。

[PDF]協力・対戦ゲームを支える Photonの最新情報
http://japan.unity3d.com/unite/unite2015/files/DAY1_1800_room2_Namiki.pdf

元ネタ

今回はググったらまさにそのままのものがあったので、こちらを実践していきます。

ただしOculusSDKやPhotonのバージョンが古く異なるため、実際には動かなかったりした部分について対応しています。

マルチOVRPlayerControllerオンライン

>> CONVRGE – How to create multiplayer Oculus Rift games in Unity
http://www.convrge.co/multiplayer-oculus-rift-games-in-unity-tutorial

Photonでオンラインのマルチプレイを作って、Oculus対応のプレイヤーOVRPlayerControllerを同期するまでのチュートリアル。

次回→OVRPlayerControllerオンラインにボイスチャット機能を追加

>> CONVRGE – How to add voice chat to Unity in under 15 minutes using DFVoice
http://www.convrge.co/add-voice-chat-to-unity-using-dfvoice

前回のPhotonでOVRPlayerControllerオンラインを作るチュートリアルから、DFVoiceを使いボイスチャット機能を追加するチュートリアル。

実装

OVRPlayerControllerオンラインを作る

Photonで適当なアプリケーションIDを作成。

Unityでプロジェクトを作成し、PhotonOculus Utilities for Unity5をインポート

Photonをインポート後に表示されるPUN Wizerdに作成したアプリケーションIDを入れる

 

1:48 適当に床を作る

2:05 OVRPlayerControllerのPrefabをシーンにおいてカスタマイズ開始

3:15 おもむろにシーン保存 → test

3:20 そのままエディタ上でシーンを実行。そのままのOVRPlayerControllerの挙動を確認。

 

4:02 Scriptsフォルダを作って NetworkedPlayer.cs スクリプトの作成開始(空ファイル)

4:57 NetworkController.cs スクリプトの作成開始(空ファイル)

5:27 シーン内に、 NetworkController ゲームオブジェクト作成。空のNetworkController.cs スクリプトをアタッチ

5:34 用意してあったコードを空のNetworkController.cs スクリプトに張り付け。

内容はPhotonの初期化処理。
・Start() → コネクションのバージョン設定してロビーに入る処理
・OnJoinedLobby() → ロビーに入った後にコールバックされる。固定名称のルームに入る(その名前でなければ作る)
・OnJoinedRoom() → ルームに入った後にコールバックされる。指定のPrefabを指定座標に配置
ちなみにPrefabにアタッチされているPhotonViewスクリプトの設定によってネットワーク上でそのPrefabの「何が」「どう」連携されるかが決まる。 6:00に張り付け後のスクリプトについて英語で解説あり。(多分同じようなことを言っているはず)

7:19 シーン内に、NetworkedPlayer ゲームオブジェクトを作成。空の NetworkedPlayer.cs スクリプトをアタッチ

7:29 これからカスタマイズするPrefabの置き場として、Resourcesフォルダを作成。
Photonでルームに入った後に配置できるPrefabはResourcesフォルダのPrefabに限られる。

7:38 シーンのNetworkedPlayerゲームオブジェクトをResourcesフォルダにドラッグアンドドロップでPrefab化。その後シーンのNetworkedPlayerプレハブは削除。

7:50 NetworkController.cs スクリプトで、Photonのルームに入った後に配置するPrefabの名前を、今作ったNetworkedPlayerに変更

8:05 NetworkedPlayer.cs スクリプトの実装開始。先ずはStartにDebug.Logで動かすもPhotonのネットワークでやり取りするPrefabにはやり取りの仕方を指定するPhotonView.csが必須なので、その重要性を説くために一度エラーを出して見せる。 8:22

8:25 Resourcesフォルダの中のNetworkedPlayerプレハブにPhotonView.csスクリプトをアタッチする。
・コンポーネントの順番変更。
・Observe option: ネットワークの信頼性の指定を行う。
・Observed Components: ネットワークで連携させるコンポーネントとしてNetworkedPlayer.cs スクリプトを指定。

8:57 一度シーンを実行してConsoleで状況を確認。Photon接続OK。Resourcesフォルダ内のNetworkedPlayerプレハブが生成されて見えるところまでOK。

もしうまく動かないようであれば、Photon Unity Networking/Demos以下のサンプルでも試して、アプリケーションIDが正しくセットされているか確認する。

Photonのバージョンが動画と違う影響か、PhotonNetwork.ConnectUsingSettings(“0.1”)後のロビー接続完了後のコールバックでOnJoinedLobby()が掲載されているスクリプトでは呼ばれないようであった。
そのため、Start()の最初にPhotonNetwork.autoJoinLobby = true;を追加で無事解決。

参考 >> 【Unity、PUN】Photon Unity Networkingのコールバックメソッド一覧 | naichilab – Android iOSアプリ開発メモ
http://naichilab.blogspot.jp/2014/12/unitypunphoton-unity-networking.html

8:59 NetworkedPlayerプレハブの実装つづき。

9:19 一度ResourcesフォルダのNetworkedPlayerプレハブをシーンに配置して編集する。
子にアバターとして簡単にCubeを配置。Avatarにリネーム。Scaleを0.3へ。

10:24 NetworkedPlayer.cs スクリプトにアバターとネットワークで連携する位置情報を持たせるフィールドを追加。Inspectorでアバターとして追加したCubeオブジェクトを設定

11:51 NetworkedPlayer.cs スクリプトにOVRPlayerControllerプレハブ内のCenterEyeAnchorの子としてNetworkedPlayer(Clone)プレハブを配置する実装を行う

次回 Oculus Rift対応のソーシャルVRを作る その2 DFVoice – Voice chat (VoIP) solution
http://2vr.jp/2015/12/04/unity-assets-vrsns-dfvoice/

Unity Assets Advent Calendar 2015 記事一覧へ