ネットコードで共有ARシーンを設定する方法
共有ARはARとネットワーク機能のセットで、マルチプレイヤーAR体験を作ることができる。 このハウツーでは、GameObjects用のUnity Netcodeを使用して、ネットワークマルチプレイヤーのセットアップ、リアルワールドトラッキングの有効化、Lightshipネットワークサーバーへの接続を学びます。
前提条件
- Lightship ARを有効にしたUnityプロジェクトが必要です。
- Shared AR プラグインをインストールする必要があります。
- ARSessionとXROriginを持つARシーンが必要です。
- UnityドキュメントのGet started with NGOからGameobjectsのNetcodeの概念と使い方に 慣れる。
シーンにコンポーネントを追加する
共有ARを使用するには、これらのコンポーネントをUnityシーンに追加する必要があります:
- Network Manager オブジェクトをシーンのルートに追加します。
- Hierarchyで、シーンタイトルを選択します。
- メインメニューから、 GameObject を選択し、 Create Emptyを選択します。
- オブジェクト名は NetworkManager。
- NetworkManager コンポーネントをオブジェクトに追加する。
-
Hierarchyで、 NetworkManagerを選択する。
-
Inspector ウィンドウで、 Add Componentをクリックします。
-
検索ボックスに「Network Manager」と入力し、選択して追加する。
-
Network Transportの下で、 Select transport... をクリックし、 LightshipNetcodeTransportを選択する。 これにより、 Lightship Netcode Transport コンポーネントが自動的に追加されます。
-
- SharedSpaceManager コンポーネントを XROriginに追加する。
-
ヒエラルキーのARシーンで、
XR Originを
選択します。 -
Inspector ウィンドウで、 Add Componentをクリックします。
-
検索ボックスに「Shared Space Manager」と入力して選択し、
XR Originに
追加します。 -
Shared Space ManagerのColocalization Typeを Mock Colocalizationに設定する。 VPS ColocalizationまたはImage Tracking Colocalizationを使用する場合は、対応するColocalization Typeに変更してください。
-
SharedSpaceManagerでNetcodeセッションを開始する
SharedSpaceManagerを使って
、次にシーンとコードをセットアップし、ユーザーが互いに接続してネットワーク・セッションを開始できるようにする。
SharedARのUIとマネージャーを設定する:
-
Hierarchyで、ARシーンの下で右クリックし、UIメニューを開き、Button - TextMeshProを選択してボタンを追加します。 この作業を繰り返し、別のボタンとテキスト・フィールドを追加する。 ボタンは ホストとクライアントを参加させるためのもので、テキストフィールドは接続ステータスを出力するためのものです。 ボタンに
JoinAsHostと
JoinAsClientと
名前を付け、テキストフィールドにLocalizationStatusTextと
名前を付けます。 -
ヒエラルキーでARシーンのルートを右クリックし、Create Emptyを選択します。 新しいオブジェクトに
NetworkDemo
という名前を付けます。 -
ProjectウィンドウのAssetsフォルダで右クリックし、Createメニューを開いてC# Script を選択します。 新しいスクリプトに
NetworkDemoManager.cs
という名前を付けます。- プロジェクトに新しいC#スクリプトを作成し、名前をNetworkDemoManager.csとする。
NetworkDemoManager.csを
開き、次のコード・スニペットを追加して、UIエレメントとSharedSpaceManagerを
初期化します:
[SerializeField]
private Text _statusText;
[SerializeField]
private Button _joinAsHostButton;
[SerializeField]
private Button _joinAsClientButton;
[SerializeField]
private SharedSpaceManager _sharedSpaceManager; -
NetworkDemoManager.cs
のフィールドをNetworkDemo
に接続します:- Hierarchy の AR Scene で、NetworkDemoコンポーネントを選択します。
- Inspector ウィンドウで、 Add Componentをクリックします。
- 検索ボックスに「Network Demo Manager」と入力し、選択して追加する。
- テキストフィールド、ボタン、そして
SharedSpaceManagerを
含むXR Originを 階層構造から ネットワークデモマネージャーコンポーネントの対応するフィールドにドラッグアンドドロップします。 この時点で、NetworkDemoは
このように見えるはずです:
部屋の作成とイベントの処理
次に、スクリプトにコードを追加して、マルチプレイヤールームを作成し、ユーザー接続などの共有ARイベントを処理する。 Network Demo Managerをマルチプレイに対応させる:
-
NetworkDemoManager.csに
コードスニペットを追加し、ルームへの接続準備を整える:ISharedSpaceTrackingOptions.CreateMockTrackingOptions(
)を呼び出して、部屋のトラッキングオプションを作成します。ISharedSpaceRoomOptions.CreateLightshipRoomOptions(
) を使用してルーム・オプションを作成し、マルチプレイヤー・ルームをインスタンス化します。SharedSpaceManagerに
sharedSpaceManagerStateChanged
イベントのハンドラを追加します。 次のコード・スニペットをコピーして、この機能をNetworkDemoManager.csに
追加してください:
protected void Start()
{
// 参加するルームを設定
var mockTrackingArgs = ISharedSpaceTrackingOptions.CreateMockTrackingOptions();
var roomArgs = ISharedSpaceRoomOptions.CreateLightshipRoomOptions(
"ExampleRoom", // 固定ルーム名を使用
32, // 最大キャパシティを設定
"vps colocalization demo (mock mode)"// 説明
);
_sharedSpaceManager.StartSharedSpace(mockTrackingArgs, roomArgs);