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に以下のコンポーネントを設置し
PhotonView
AudioSource
PhotonVoiceView
Speaker
PhotonVoiceView
に以下を設定します.Speaker In Use
に同じGameObject内のSpeaker
Use 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
内に配置し,以下の画像のようにコンポーネントと値を設定します.BoxCollider
NearInteractionGrabbable
ManipulationHandler
RemotePlayspace
直下だとHoloLensのWorldAnchorとAzure Spatial Anchorのシステムと競合するためRemoteObjects
以下に配置しています.