サーバサイドプログラムで利用できる各種機能

目次

  概要
  RPCメッセージを送信する
  RPCメッセージを受信する
  prefab からシーン静的オブジェクトをインスタンス生成する


概要

サーバサイドプログラミングにおいて、MUNクライアントとの通信を行なう手段

  ここでは、サーバサイドプログラミングにおいて、MUN クライアントに対し何らかの命令を実行(送信)する手段、
  および MUN クライアントから何らかの情報を取得(受信)する手段について説明します。

  MUN クライアントへの送受信が可能であれば、MUN クライアントの制御についてサーバサイドに移植することは
  それほどハードルの高いことではありません。


RPCメッセージを送信する

RPC を利用した、MUN サーバから MUN クライアントへの送信処理

  MUN サーバから MUN クライアントに対し、RPCメッセージを送信する場合には、
  MonobitEngine.MonobitNetwork.RPC() メソッドを利用します。

機能

  特定のルームに所属する全ての MUN クライアント に対し、RPC メッセージを送信します。

  このメソッドを実行する場合、メソッドの性質上、以下の条件を満たしている必要があります。

    1. 送信先として指定できるのは、MonobitView コンポーネントを持つオブジェクトに限定されます。
        ※ 一意の MonobitView ID を持つ、シーン静的オブジェクトである方が望ましいです。

    2. 送信先として指定されたオブジェクトに、自由に作成したスクリプトが1つ以上登録されており、
      同時に、以下の2つの条件を満たす必要がります。
        1) そのスクリプト内のクラスが、MonobitEngine.MonoBehaviour を継承していること。
        2) 上記 1) のクラス内で、[MunRPC] のアトリビュート付きで、RPCの受信メソッドが記述されていること。

引数

変数名 内容
UInt64 roomId RPCメッセージの送信対象となる MUN クライアントが所属する、ルームID。
この値については、先に示した サーバサイドプログラムのテンプレート 通りに記載している場合、
MunRoomInfo.GetId() メソッド(m_RoomInfo.GetId() メソッド)で取得することができます。
UInt32 viewId RPCメッセージの送信対象となる MUN クライアント内のオブジェクトが保有する、MonobitView コンポーネントの ID。
プレハブから生成されるオブジェクトである場合、この値が「MUNクライアントのPlayerIDに応じて変動する」ことから、
出来る限り「シーンに静的に配置されたオブジェクト」の MonobitView ID を指定することが望ましいです。
string methodName RPCメッセージの送信先となるメソッド名。
ここで指定する文字列と同じ名前のメソッド名が、送信対象となる MUN クライアント内オブジェクトが保有するスクリプト内で、
[MunRPC] のアトリビュート付きで記述されている必要があります。
params object[] parameters RPCメッセージの送信先となるメソッドの引数パラメータ(可変長)。
上記 methodName に記載したメソッドについて、ここで指定するパラメータと、引数の型、順番、数が一致する必要があります。

戻り値

内容
void -

MUN サーバから MUN クライアントへのRPCメッセージ送信の実装方法(MUNクライアント側)

  まず、MUN クライアント側で、RPC メッセージの受信制御を組み込みます。
  手始めに、以下のような シーン上の静的オブジェクトを作成します。
    ※ 以下の画像では「GameObject」になっていますが、名前は任意のもので構いません。
  続けて、作成された静的オブジェクトについて、「MonobitView コンポーネント」を登録します。
  MonobitView コンポーネントの「MonobitView ID」については、 1 ~ 999 の範囲でのいずれかの値 を設定してください。
    ※ 以下の画像では、仮に 100 にしていますが、上述の通り 1 ~ 999の範囲であれば、どんな値でも構いません。
  更に、同オブジェクトに対し、新規スクリプトを作成して登録します。
    ※ 以下の画像では、MyScript.cs としていますが、名前は自由で構いません。
  上記で追加したスクリプト内にて、MonobitEngine.MonoBehaviour を継承した上で、任意の受信メソッドを記述します。
    ※ メソッド名、および引数の型・数・名称については、状況に応じて自由に付けてください。
    ※ メソッド名の接頭辞として、[MunRPC] のアトリビュートを記述するのを忘れないでください。

MUN サーバから MUN クライアントへのRPCメッセージ送信の実装方法(MUNサーバ側)

  一方、MUN サーバ側から MUN クライアントへの RPC メッセージ送信を実行するためには、
  先に示した サーバサイドプログラムのテンプレート のように記述したクラス内で、MonobitEngine.MonobitNetwork.RPC() メソッドを実行します。
    ※ 上記で示した内容に即して、パラメータとして、
            「viewId=100」「methodName="MyScriptCallback"」「parameters=10, "abcdef"」
      としていますが、MUN クライアント側で登録している MonobitView コンポーネントやスクリプト内のRPC受信メソッドに応じて置き換えてください。
    ※ 下記画像では、 Start() メソッド内に記述していますが、実行する場所は何処でも構いません。

実行準備完了

  これで実行することで、MUN ルーム内に入室した際に、MUN クライアント側で MyScriptCallback() メソッドが呼び出され、
  RPC メッセージの受信について完遂されたことが確認できます。


RPCメッセージを受信する

RPC を利用した、MUN クライアントから MUN サーバへの送信処理

  逆に、MUN クライアントから MUN サーバに対し、RPCメッセージを送信する場合には、
  MUN クライアントにある MonobitEngine.MonobitView.RPC() メソッド もしくはMonobitEngine.MonobitView.RpcSecure() メソッド を利用します。

    送信制御:MonobitEngine.MonobitView.RPC メソッド (1)
    送信制御:MonobitEngine.MonobitView.RPC メソッド (2)
    送信制御:MonobitEngine.MonobitView.RpcSecure メソッド (1)
    送信制御:MonobitEngine.MonobitView.RpcSecure メソッド (2)

  MUN クライアントについては上記メソッドを使って送信しますが、受信処理について、MUN クライアント同士のRPCメッセージ送受信と比較した場合、
  以下の2つの点で違いがあります。

    1. MUN クライアント側で RPCメッセージ受信メソッドを記述せず、
      代わりに、MUN サーバ側で、先に示した サーバサイドプログラムのテンプレート として作成したクラスに RPCメッセージ受信メソッドを記述する。

    2. 上記 1. で示した、MUN サーバ側の RPC 受信メソッドには、[MunRPC] のアトリビュートを記述しない

MUN クライアントから MUN サーバへのRPCメッセージ送信の実装方法(MUNクライアント側)

  上記 RPCメッセージの送信 に関する実装方法で示した内容をベースに、MUN クライアント側で、RPC メッセージの送信制御を組み込みます。
  追加した新規スクリプト内にて、MonobitEngine.MonobitView.RPC() を使って、MUN サーバに送信する処理を記述します。
    ※ 下記画像では、 Update() メソッド内に記述していますが、実行する場所は何処でも構いません。
    ※ MUN サーバ側の受信メソッド名、および引数の型・数・実値については、状況に応じて自由に付けてください。
  サーバサイドにのみ送信する場合(クライアントサイドでは何も行わない場合)、MonobitEngine.MonobitView.RPC() の第2パラメータには
new MonobitPlayer(false, 0, "")
  と指定してください。
  サーバサイドおよびクライアントサイドに同時に送信する場合、MonobitEngine.MonobitView.RPC() の第2パラメータには通常のクライアントサイドの送信方法と
  同じように、MonobitTargets または MonobitPlayer の指定を行なってください。

MUN クライアントから MUN サーバへのRPCメッセージ送信の実装方法(MUNサーバ側)

  一方、MUN サーバ側にて、MUN クライアントからの RPC メッセージ受信を実行するためには、
  先に示した サーバサイドプログラムのテンプレート のように記述したクラス内で、受信メソッドを記述します。
    ※ 上記で示した内容に即して、メソッド名を MunRoomRpcCallback 、パラメータとして、string, float の順で記載していますが、
      MUN クライアントから送信される情報に応じて、RPCメッセージの送信情報として許容されている範囲で、自由に設定していただいて問題ありません。
    ※ [MunRPC] のアトリビュートを記述しません。記述するとコンパイルエラーを出しますので、注意してください。

実行準備完了

  これで実行することで、MUN クライアントがルーム内に入室している最中に、
  MUN サーバ側で MunRoomRpcCallback() メソッドが呼び出されます。


prefab からシーン静的オブジェクトをインスタンス生成する

MUN サーバから MUN クライアントに対し、シーン静的オブジェクトの生成を命令する処理

  MUN サーバから MUN クライアントに対し、シーン静的オブジェクトの生成するための命令として、
  MonobitEngine.MonobitNetwork.InstantiateSceneObject() メソッドを利用します。

機能

  特定のルームに所属する全ての MUN クライアント に対し、シーン静的オブジェクトを生成します。

  このメソッドを実行する場合、メソッドの性質上、
  シーン静的オブジェクトの生成元となる prefab のデータが、Resources ディレクトリ内に含まれている必要があります。
    ※ Assets ディレクトリ内であれば、どの階層の Resources ディレクトリであっても問題ありません。

引数

変数名 内容
UInt64 roomId シーン静的オブジェクトの生成対象となる MUN クライアントが所属する、ルームID。
この値については、先に示した サーバサイドプログラムのテンプレート 通りに記載している場合、
MunRoomInfo.GetId() メソッド(m_RoomInfo.GetId() メソッド)で取得することができます。
string prefabName シーン静的オブジェクトの生成元となるプレハブ名。
シーン静的オブジェクトの生成元となる prefab のデータが、Resources ディレクトリ内に含まれている必要があります。
(Assets ディレクトリ内であれば、どの階層の Resources ディレクトリであっても問題ありません。)
MonobitEngine.UnityEngine_Vector3 position 生成されたシーン静的オブジェクトの初期配置座標。
MonobitEngine.UnityEngine_Vector3 型は、UnityEngine.Vector3 型と同一型であり、以下の要素を持ちます。
変数名 内容
float x X 座標値
float y Y 座標値
float z Z 座標値
MonobitEngine.UnityEngine_Quaternion rotation 生成されたシーン静的オブジェクトの初期配置角度。
MonobitEngine.UnityEngine_Quaternion 型は、UnityEngine.Quaternion 型と同一型であり、以下の要素を持ちます。
変数名 内容
float x クォータニオン X 成分
float y クォータニオン Y 成分
float z クォータニオン Z 成分
float w クォータニオン W 成分

戻り値

内容
void -

MUN サーバから MUN クライアントへのシーン静的オブジェクト生成の実装方法(MUN クライアント側)

  まず、MUN クライアント側で、シーン静的オブジェクト用のプレハブを作成します。

  とは言え、プレハブ生成手順を説明するのも冗長ですので、ここではパッケージ既存のものを使います。
  Assets/Monobit Unity Networking/Samples/Resources ディレクトリ内に「item.prefab」があることを確認してください。

MUN サーバから MUN クライアントへのシーン静的オブジェクト生成の実装方法(MUNサーバ側)

  一方、MUN サーバ側から MUN クライアントに対し、シーン静的オブジェクトの生成処理を実行するためには、
  先に示した サーバサイドプログラムのテンプレート のように記述したクラス内で、MonobitEngine.MonobitNetwork.InstantiateSceneObject() メソッドを実行します。
    ※ 上記で示した内容に即して、パラメータとして、
            「prefabName="item"」「position=(20,0,30)」「rotation=(0, 180, 0)」
      としていますが、MUN クライアント側で生成するシーン静的オブジェクトの内容に応じて、適宜置き換えてください。
    ※ 下記画像では、 Start() メソッド内に記述していますが、実行する場所は何処でも構いません。

実行準備完了

  これで実行することで、MUN ルーム内に入室した際に、MUN クライアント側でシーン静的オブジェクト「item」が生成され、
  指定された位置・姿勢で配置されます。