Azure Remote RenderingのShowcaseプロジェクトで利用されているPhotonによるSharing機能を利用,機能拡張します.
Azure Remote Rendering
- Azure Remote RenderingのShowcaseプロジェクト導入方法 : Azure Remote Rendering のShowcase導入手順
PhotonによるSharing機能の設定
複数のプラットフォームでマルチプレイヤー機能を実装できるネットワークサービス
あらかじめPhotonのサイトにてPhoton RealitimeのアプリケーションIDを取得しておいてください
ShowcaseにPhoton導入
Azure Remote RenderingのShowcaseプロジェクトにPhotonを追加します.
UnityのAssets StoreからPhotonのアセット
PUN 2 - FREEをダウンロード,インポートします.インポート後
PUN Setup画面にアプリケーションIDを入力後,HierarchyのMixedRealityToolkit内の要素に以下を追加Extensions/SharingService/Photon Settings/Photon Realtime IdにアプリケーションIDを入力
またPhoton内でマルチプレイヤー接続のためにリージョンを固定しておきます.(今回は日本サーバーにしたいので
jp)- Unityメニューから
Window/Photn Unity Networking/Highlight Server Settingsを選択 Server/Cloud Settings/Fixed RegionとDev Regionにjpと入力
- Unityメニューから
ビルドすると複数HoloLens 2 またはHoloLens 2とデスクトップアプリで表示されるAzure Remote Rendering表示モデルが同期して表示,移動,操作することが確認できます.
PhotonのSharing機能だけではHoloLens 2同士の位置合わせ行われないので起動位置によってモデルの表示位置は異なります.
HoloLens同士の位置合わせを行う場合には別途Azure Spatial Anchorを設定する必要があります.
ボイスチャットの追加
遠隔地からのモデルのSharingができるとそのまま会話もしたくなったのでPhotonのボイスチャットサービスを追加してみます.
Photonにはボイスチャットのサービスとして
Photon Voiceが用意されています.
Photon Voiceの導入
あらかじめPhotonのページからPhoton Voiceを設定してアプリケーションIDを取得しておきます.
UnityのAssets Storeから
Photon Voice 2をダウンロード,インポートします.インポート後にAndroidの
AndroidJNIModuleライブラリが不足している警告が出る場合があります.- Unityメニューの
Window/Package Managerを選択してPackage Managerウィンドウ左上のUnity RegistryをBuild-in packagesに切り替えます. - パッケージ一覧から
Android JNIを選択しEnableしてパッケージをインポートします.
- Unityメニューの
Unityメニューから
Window/Photn Unity Networking/Highlight Server Settingsを選択Server/Cloud Settings/App Id VoiceにPhoton VoiceアプリケーションIDを入力
GameObject設定
- Showcaseプロジェクトではボイスチャット機能は標準で実装されていません.そのためボイスチャット部分だけ組み立てる必要があります.
Photon VoiceはSharingで利用しているPhotonとネットワーク設定を共有することができるので,ボイスの受信と送信機能を作成します.
Photon Voiceではマイクからネットワークに音声を送信する部分を
Recorder,ネットワークから受信した音声データを再生する部分をSpeakerとしてシーンに配置します.
Speaker機能追加
Speakerはネットワーク上で接続された他のプレイヤー毎に必要になるため,事前にシーン上には配置せず動的に生成します.- 今回は
ResourcesフォルダにPrefabを作成して,新規プレイヤーが接続されたらPrefabからSpeakerを生成する方法を利用します. - 空のGameObjectに以下のコンポーネントを設置し
PhotonViewAudioSourcePhotonVoiceViewSpeaker
PhotonVoiceViewに以下を設定します.Speaker In Useに同じGameObject内のSpeakerUse Primary Recorderにチェック
設定したGameObjectをPrefab化して
Resourcesフォルダ内に配置しておきます.
Photonに接続されたプレイヤーを動的に生成するためのスクリプトをシーンの適当なオブジェクトに
PhotonVoiceNetworkと配置します.MonoBehaviourPunCallbacksを継承したスクリプトPhotonVoiceJoinPlayer.csを作成し,playerPrefabにResourceフォルダのPrefabをアタッチしておきます.
|
|
Recorder機能追加
ボイスの送信はプレイヤーに対して一つのみ必要なのでシーン上のGameObjectにスクリプトを設定します.
Speaker設定で作成したシーン上のPhotonVoiceNetworkと同じオブジェクトにRecorderをアタッチし以下のように設定します.
手動位置合わせ機能の追加
- ShowcaseプロジェクトでサポートされているHoloLens同士の位置合わせにはAzure Spatial Anchorを利用しています.
遠隔地でそれぞれの基準位置設定や,手軽な位置設定には不向きなので手動でできるようにGizmoでのマニピュレーション移動を追加してみました.
MRTK内
MRTK/StandardAssets/Controllers/DEbugControllersのGizmoLeft.prefabを利用してハンドまにぴょレーションを追加します.-
GizmoLeft/prefabをシーン内のRemotePlayspace/RemoteObjects内に配置し,以下の画像のようにコンポーネントと値を設定します.BoxColliderNearInteractionGrabbableManipulationHandler-
RemotePlayspace直下だとHoloLensのWorldAnchorとAzure Spatial Anchorのシステムと競合するためRemoteObjects以下に配置しています.