サーバー・クライアントの接続・切断時にメッセージを表示する【MLAPI】

引き続きMLAPIのお勉強。

前回記事

xrdnk.hateblo.jp

NetworkingManager

NetworkingManager はシングルトンクラスで、ネットワーク関連の設定の管理を行います。

ホスト接続・クライアント接続

以前のこちらの記事で、ホスト接続、クライアント接続開始の際に以下を利用していました。

xrdnk.hateblo.jp

NetworkingManager.Singleton.StartHost();
NetworkingManager.Singleton.StartClient();

ホスト切断・クライアント切断

同様にして、切断時には以下を呼び出します。

NetworkingManager.Singleton.StopHost();
NetworkingManager.Singleton.StopClient();

サーバーが立ち上がる際に呼び出されるコールバック

NetworkingManager には OnServerStarted というサーバーが立ち上がる際に呼び出されるイベント関数があります。

クライアント接続・切断時に呼び出されるコールバック

クライアント接続の際は OnClientConnectedCallback が、切断の際は OnClientDisconnectedCallback が呼び出されます。

接続・切断時にメッセージを表示してみる

以上を利用して、接続・切断時にメッセージを表示してみます。
MLAPI_Initializer.cs を編集します。

using UnityEngine;
using UnityEngine.UI;

using MLAPI;

public class MLAPI_Initializer : MonoBehaviour
{
    [SerializeField] private Button _startHostButton;
    [SerializeField] private Button _startClientButton;
    [SerializeField] private Button _stopHostButton;
    [SerializeField] private Button _stopClientButton;

    private void Start()
    {
        _startHostButton.onClick.AddListener(StartHost);
        _startClientButton.onClick.AddListener(StartClient);
        _stopHostButton.onClick.AddListener(StopHost);
        _stopClientButton.onClick.AddListener(StopClient);
    }

    private void StartHost()
    {
        NetworkingManager.Singleton.OnServerStarted += OnServerStartedCallback;
        NetworkingManager.Singleton.OnClientConnectedCallback += OnClientConnectedCallback;
        NetworkingManager.Singleton.OnClientDisconnectCallback += OnClientDisconnectedCallback;
        NetworkingManager.Singleton.StartHost();
    }
    private void StartClient()
    {
        NetworkingManager.Singleton.OnClientConnectedCallback += OnClientConnectedCallback;
        NetworkingManager.Singleton.OnClientDisconnectCallback += OnClientDisconnectedCallback;
        NetworkingManager.Singleton.StartClient();
    }

    private void StopHost()
    {
        NetworkingManager.Singleton.OnServerStarted -= OnServerStartedCallback;
        NetworkingManager.Singleton.OnClientConnectedCallback -= OnClientConnectedCallback;
        NetworkingManager.Singleton.OnClientDisconnectCallback -= OnClientDisconnectedCallback;
        NetworkingManager.Singleton.StopHost();
    }
    private void StopClient()
    {
        NetworkingManager.Singleton.OnClientConnectedCallback -= OnClientConnectedCallback;
        NetworkingManager.Singleton.OnClientDisconnectCallback -= OnClientDisconnectedCallback;
        NetworkingManager.Singleton.StopClient();
    }

    /// <summary>
    /// クライアントが接続した際に呼び出される
    /// </summary>
    private void OnClientConnectedCallback(ulong clientId)
    {
        Debug.Log($"Client connected {clientId}");
    }

    /// <summary>
    /// クライアントが切断した際に呼び出される
    /// </summary>
    private void OnClientDisconnectedCallback(ulong clientId)
    {
        Debug.Log($"Client disconnected {clientId}");
    }

    /// <summary>
    /// サーバーが立ち上がった際に呼び出される
    /// </summary>
    private void OnServerStartedCallback()
    {
        Debug.Log("Server started");
    }
}

これで実際にメッセージがデバッグコンソールに表示されるか確認してみます。

サーバー立ち上げ (ホスト入室)

gyazo.com

Server Started. が表示されていますね。

クライアント接続時

gyazo.com

ホスト側・クライアント側にも Client Connected 2 が表示されています。

クライアント切断時

gyazo.com

ホスト側で Client disconnected 2 が表示されています。

clientId は 2になっていましたが、入室していくとインクリメントされていく感じですかね。

github.com

NetworkingManager.cs の中身のコード読む感じ、それっぽい。