グループ制御
目次
概要
事前設定
MonobitEngine.MonobitView.group 変数
MonobitEngine.MonobitNetwork.SetSendingEnabled メソッド (1)
MonobitEngine.MonobitNetwork.SetSendingEnabled メソッド (2)
MonobitEngine.MonobitNetwork.SetReceivingEnabled メソッド (1)
MonobitEngine.MonobitNetwork.SetReceivingEnabled メソッド (2)
グループごとの、情報の送受信を受け付けるかどうかの設定
MMORPGなど、広大なフィールド上を多人数で共有させた空間を動かした場合、想像するだけでも膨大な通信負荷が発生します。
おそらく通信負荷だけで、サーバのネットワークリソースを食い潰し、「重すぎて一歩も動けない状態」になることも考えられます。
グループとは、上記のような状況を回避するために使用されるものです。
例えば広大なフィールドを幾つかのエリア(グループ)に分け、そのエリアに存在する情報のみ送受信するように、通信制限を加えることができます。
全てのエリア、全てのプレイヤーに対し、グループ制御を加えることによって、全体のトラフィック量を下げる効果が出てくることでしょう。
通常のゲームを作る上では考える必要もないかも知れませんが、
膨大な量(あるいは広大な領域)を動かすゲームであれば、グループ制御の適用も考えてみてください。
なお、グループIDの「0」番は特殊で、ルーム内プレイヤー間の送受信(RPC, オブジェクト同期)の他にも、
各種ロビー/ルーム制御のための通信にも利用されるため、送受信を無効にすること(送受信拒否)はできません。
事前設定▲
グループ制御の対象物には、MonobitViewコンポーネントの登録が必要です
MonobitView にグループ情報が含まれていますので、MonobitView コンポーネント登録が必須です。
MonobitEngine.MonobitView.group 変数▲
機能
自分自身のグループIDを決定します。
原則的に、同一グループIDを持つオブジェクト同士で、オブジェクト同期&RPC通信を行ないます。
そのため、ここで設定した値と、MonobitEngine.MonobitNetwork.Instantiate() の第4引数に設定した値とで一致しない場合には、通信を行ないません。
クライアント間でオブジェクト同期を行っている最中、この値を無理やり「本来MonobitEngine.MonobitNetwork.Instantiate()
で設定したものとは別の値」に変更した場合、
変更した値を他クライアントと同期する前にグループIDの齟齬が発生するため、ネットワーク越しの自動同期ができなくなります。
どうしてもそういった制御が必要なのであれば、 以下の記述例を参考に monobitView.RPC() メソッドを使用してクライアント間の同期をとってください。
変数型
型 |
内容 |
int |
ローカル情報として、グループIDとして保持します。
デフォルト値は 0 です。 |
記述例
// group に 2 を登録します。
class Foo : MonobitEngine.MonoBehaviour
{
...
void Update()
{
...
monobitView.RPC("SetGroup", MonobitEngine.MonobitTargets.All, 2 );
...
}
...
[MunRPC]
void SetGroup(int groupId)
{
monobitView.group = groupId;
}
...
}
MonobitEngine.MonobitNetwork.SetSendingEnabled メソッド (1)▲
機能
指定したグループに属する MonobitView オブジェクトの送信可否を決定します。
なお、グループIDの「0」番は特殊で、ルーム内プレイヤー間の送受信(RPC, オブジェクト同期)の他にも、
各種ロビー/ルーム制御のための通信にも利用されるため、送信を無効にすること(送信拒否)はできません。
引数
型 |
変数名 |
内容 |
int |
group |
設定するグループID |
bool |
enabled |
送信を有効にするには true 、 無効にするには false を設定する |
戻り値
記述例
// グループID 1 の送信を無効にします。
MonobitEngine.MonobitNetwork.SetSendingEnabled( 1, false );
MonobitEngine.MonobitNetwork.SetSendingEnabled メソッド (2)▲
機能
指定したグループに属する MonobitView オブジェクトの送信可否を決定します。
なお、グループIDの「0」番は特殊で、ルーム内プレイヤー間の送受信(RPC, オブジェクト同期)の他にも、
各種ロビー/ルーム制御のための通信にも利用されるため、送信を無効にすること(送信拒否)はできません。
引数
型 |
変数名 |
内容 |
int[] |
enableGroups |
送信を許可するグループID群 |
int[] |
disableGroups |
送信を拒否するグループID群 |
戻り値
記述例
// グループID 0, 2 の送信を有効にし、グループID 1, 3 の送信を無効にします。
MonobitEngine.MonobitNetwork.SetSendingEnabled( new int[] { 0, 2 }, new int[] { 1, 3 } );
MonobitEngine.MonobitNetwork.SetReceivingEnabled メソッド (1)▲
機能
指定したグループに属する MonobitView オブジェクトの受信可否を決定します。
なお、グループIDの「0」番は特殊で、ルーム内プレイヤー間の送受信(RPC, オブジェクト同期)の他にも、
各種ロビー/ルーム制御のための通信にも利用されるため、受信を無効にすること(受信拒否)はできません。
引数
型 |
変数名 |
内容 |
int |
group |
設定するグループID |
bool |
enabled |
受信を有効にするには true 、 無効にするには false を設定する |
戻り値
記述例
// グループID 1 の受信を無効にします。
MonobitEngine.MonobitNetwork.SetReceivingEnabled( 1, false );
MonobitEngine.MonobitNetwork.SetReceivingEnabled メソッド (2)▲
機能
指定したグループに属する MonobitView オブジェクトの受信可否を決定します。
なお、グループIDの「0」番は特殊で、ルーム内プレイヤー間の送受信(RPC, オブジェクト同期)の他にも、
各種ロビー/ルーム制御のための通信にも利用されるため、受信を無効にすること(受信拒否)はできません。
引数
型 |
変数名 |
内容 |
int[] |
enableGroups |
受信を許可するグループID群 |
int[] |
disableGroups |
受信を拒否するグループID群 |
戻り値
記述例
// グループID 0, 2 の受信を有効にし、グループID 1, 3 の受信を無効にします。
MonobitEngine.MonobitNetwork.SetReceivingEnabled( new int[] { 0, 2 }, new int[] { 1, 3 } );