オブジェクト同期データの送信制限について

目次

  概要
  事前設定
  MonobitEngine.MonobitNetwork.VectorThreshold フィールド
  MonobitEngine.MonobitNetwork.QuaternionThreshold フィールド
  MonobitEngine.MonobitNetwork.FloatThreshold フィールド


概要

オブジェクト同期処理の際に「ほとんど変化のない」値を送信しない

  MonobitView コンポーネントを持つオブジェクトは、MonobitEngine.MonobitNetwork.updateStreamRate プロパティ にて
  指定されたタイミングに基づき、同期に必要となる各種データを送信します。
  ただし MUN の内部設計として、「キャラクタが完全に立ち止まっていて変化しない」状態の場合、
  同期情報を送信しないことで、全体の通信負荷を減らす処理を行なっています。

  ここで紹介するのは、この「完全に立ち止まって変化しない」ことを判断するための、
  オブジェクトの変化の閾値について変更する処理について説明していきます。

  ほとんど変化が見られない数値成分については、そのフレーム送信において、対象データから除外することで、
  システム全体のトラフィック総量を減らすことができます。

事前設定

送信データを包含/除外する閾値の設定が必要です。

  そのフレームにおいて、前フレームとの送信データの差分を取った結果、送信するかどうかを決定するために
  差分値に対する閾値の設定が必要です。

  閾値の設定については以下の項目により初期値が設定されていますが、スクリプト上のどのタイミングでも
  値を変動させることが可能です。
フィールド名 初期値
MonobitEngine.MonobitNetwork.VectorThreshold 0.000099
MonobitEngine.MonobitNetwork.QuaternionThreshold 1.0
MonobitEngine.MonobitNetwork.FloatThreshold 0.01


MonobitEngine.MonobitNetwork.VectorThreshold フィールド

機能

  UnityEngine.Vector2 の x, y 成分、UnityEngine.Vector3 の x, y, z 成分、UnityEngine.Vector4 の x, y, z, w 成分の値に関し、
  前フレームで送信したオブジェクト同期データとの差分値の結果から送信するかどうかの閾値を指定します。

データ型

内容
float UnityEngine.Vector2, UnityEngine.Vector3, UnityEngine.Vector4 の各成分値において、
前フレームとの送信差分値が、この VectorThreshold で指定した値を上回った場合のみ送信対象とします。
同値、または下回った場合には、その値を送信しません。

なお、デフォルト値は「0.000099」で、スクリプト上のどの段階でも変更することが可能です。

記述例

/*
 * 自身のオブジェクトに対し、Vectorの閾値について0.01に設定した上で、差分送信を有効にします。
 */
class Foo : MonobitEngine.MonoBehaviour
{
    ...

    void Start()
    {
        MonobitEngine.MonobitNetwork.VectorThreshold = 0.01f;
        monobitView.compressedStream = MonobitEngineBase.CompressedStream.DeltaCompressed;
    }

    ...
}


MonobitEngine.MonobitNetwork.QuaternionThreshold フィールド

機能

  UnityEngine.Quaternion の x, y, z, w 成分の値に関し、前フレームで送信したオブジェクト同期データとの差分値の結果から
  送信するかどうかの閾値を指定します。

データ型

内容
float UnityEngine.Quaternion の各成分値において、前フレームとの送信差分値をオイラー角(0度~360度の範囲)で表現した結果、
この QuaternionThreshold で指定した値を上回った場合のみ送信対象とします。
同値、または下回った場合には、その値を送信しません。

なお、デフォルト値は「1.0」で、スクリプト上のどの段階でも変更することが可能です。

記述例

/*
 * 自身のオブジェクトに対し、Quaternionの閾値について0.1に設定した上で、差分送信を有効にします。
 */
class Foo : MonobitEngine.MonoBehaviour
{
    ...

    void Start()
    {
        MonobitEngine.MonobitNetwork.QuaternionThreshold = 0.1f;
        monobitView.compressedStream = MonobitEngineBase.CompressedStream.DeltaCompressed;
    }

    ...
}


MonobitEngine.MonobitNetwork.FloatThreshold フィールド

機能

  浮動小数点型で示されたすべてのオブジェクト同期データに対し、前フレームで送信したオブジェクト同期データとの差分値の結果から
  送信するかどうかの閾値を指定します。

データ型

内容
float 浮動小数点型で示されたすべてのオブジェクトデータにおいて、前フレームとの送信差分値が、この FloatThreshold で指定した値を
上回った場合のみ送信対象とします。同値、または下回った場合には、その値を送信しません。

なお、デフォルト値は「0.01」で、スクリプト上のどの段階でも変更することが可能です。

記述例

/*
 * 自身のオブジェクトに対し、浮動小数値の閾値について0.001に設定した上で、差分送信を有効にします。
 */
class Foo : MonobitEngine.MonoBehaviour
{
    ...

    void Start()
    {
        MonobitEngine.MonobitNetwork.FloatThreshold = 0.001f;
        monobitView.compressedStream = MonobitEngineBase.CompressedStream.DeltaCompressed;
    }

    ...
}