アヒルのある日

株式会社AHIRUの社員ブログです。毎週更新!社員が自由に思いついたことを書きます。

Unity Lobby/Relay入門 (#1)

こんにちは、ちゃらいプログラマです。
業務でUnity Lobby/Relayを触る機会があったので
まずは実際に使用する前の準備周りを説明していきます。

各プラグインのバージョンはこちら

Lobby - 1.2.2
Relay - 1.1.1
NetCode for GameObjects - 1.9.1
Transport - 2.3.0
Unity Lobby/Relayとはなにか?

Unity社が提供しているマルチプレイヤーゲームを実装するためのプラグインです。
Lobbyは、プレイヤーをグループ化するもの
Relayは、Lobbyに集まったプレイヤーを接続し通信できるようにするもの
です。

NetCode for GameOjbects(以下NGO)は
Relayでの通信をRPC(Remote Procedure Call)で行えるように
するために導入します。

前提

Lobby/Relayを使用するには、Unity Dashboardでプロジェクト作成したり
各種サービスを有効化する必要があります。
設定方法はUnity公式ドキュメントに記載がありますので設定済として進めます。

NGOには便利な同期処理用のコンポーネント(NetworkTransform/NetworkAnimator等)がありますが使用せずにプログラムのみで同期する方法で進めます。

準備1(シーンにNetworkManagerを配置)
  • 空のGameObjectを生成します。必ずシーン直下に生成してください。(NetworkManagerコンポーネント追加時に怒られます。)
  • 生成したGameObjectに「NetworkManager」コンポーネントを追加します。
  • Selecttransport...ボタンがあるので、「UnityTransport」を選択します。
  • 設定すると、「UnityTransport」コンポーネントが追加されます。

準備2(Network上で同期するGameObjectを準備)
  • 空のGameObjectを生成します。(名前はNetworkObjectとしておきます)
  • 生成したGameObjectに「NetworkObject」コンポーネントを追加します。
  • デフォルトでは以下のようなチェック状態です。
以下のチェックを更新します。
- SynchronizeTransform
 今回は不要なのでOFF
- ActiveSceneSynchronization
 ON推奨。大体のゲームがアウトゲーム側でマッチングし、インゲームに遷移すると思います。
- SceneMigrationSynchronization
 今回はOFF
  • 今後の為にRPCを行うクラスを作成します。
using UnityEngine;
using Unity.Netcode;

// NetworkBehaviourを継承してください
public class NetworkObjectBehaviour : NetworkBehaviour
{
}
  • 生成したGameObjectにNetworkObjectBehaviourを追加します。
  • 生成したGameObjectをPrefab化します。
  • Prefab化したGameObjectを「準備1」で生成したNetworkManagerコンポーネントの「PlayerPrefab」へ設定します。

PlayerPrefabへ登録したGameObjectがRelay接続端末上で同期される仕組みです。

次回は、実際にLobby/Relayへの接続周りのソースコードを説明できればと思います。 ではまた。