任意のタイミングによる、ObservedComponentListへの登録管理

目次

  概要
  事前設定
  MonobitEngine.MonobitView.ObservedComponents プロパティ
  MonobitEngineBase.MonobitView.UpdateSerializeViewMethod メソッド


概要

同期オブジェクトの Observed Component List に対し、任意のタイミングでスクリプトの追加/削除を実行する

  先述のページでは、オブジェクト同期処理のために
  MonobitView コンポーネントの Observed Component Registration List に対し事前に登録する方法を述べましたが、
  このリスト登録はプログラム実行後でも、任意のタイミングでスクリプトを追加/削除することが可能です。

  スクリプトで管理する場合には処理が複雑化するものの、オブジェクト同期処理に伴う接続コールバックメソッドの呼び出しは比較的負荷が高いため、
  任意のタイミングに併せてコールバック処理自体をカットすることにより、クライアントに対する無駄な処理負荷、無駄な通信負荷を軽減することができます。


事前設定

リスト登録処理、並びにオブジェクト同期処理を組み込むスクリプトには、MonobitEngine.MonoBehavior の継承が必要です

  先の説明と同様、オブジェクト同期データのための送受信処理で利用する MUN のコールバック機能のために、
  コールバックの呼び出しは MonobitEngine.MonoBehavior を継承したクラスに限定されます。

  また、オブジェクト同期処理を組み込んだスクリプトを Observed Component Registration List に登録するためのスクリプトについても、
  MonobitView コンポーネントを利用するため、同様に MonobitEngine.MonoBehaviour を継承する必要があります。


MonobitEngine.MonobitView.ObservedComponents プロパティ

機能

  MonobitView コンポーネントに存在する Observed Component Registration List の本体となるリスト情報です。
  このリストにスクリプト上で追加/削除することにより、実行中の任意のタイミングでオブジェクト同期処理そのものの追加/削除が可能です。

  ただし、スクリプト上で追加/削除された内容を反映させるためには
  MonobitEngineBase.MonobitView.UpdateSerializeViewMethod メソッド による更新処理が必要ですので、ご注意ください。

入出力型

内容
List<UnityEngine.Component> オブジェクト同期のためのコールバックメソッドを含む、スクリプトのコンポーネントです。
入出力の際には、GameObject.GetComponent<> メソッドなどを利用して取得して登録してください。

記述例

// 特定の同期オブジェクトに登録されているスクリプト Foo から、
// 同じオブジェクトに登録されているスクリプト Boo の同期処理を管理します。
//
// Foo クラス, Boo クラスともに MonobitEngine.MonoBehaviour を継承し、
// 加えて、Boo クラスには オブジェクト同期処理をするためのコールバックメソッドが実装済みであることを前提とします。

class Foo : MonobitEngine.MonoBehaviour 
{
    ...

    // スクリプト Boo の同期処理を、Observed Component Registration List に登録します。
    public void Method_A()
    {
        // Boo のコンポーネントを取得します。
        UnityEngine.Component component = gameObject.GetComponent<Boo>();
 
        // 二重登録を防止するため、Contains で見つからなかった場合、リストに登録するようにします。
        if (!monobitView.ObservedComponents.Contains(component))
        {
            monobitView.ObservedComponents.Add(component);

            // 登録内容を monobitView オブジェクトに反映させます。
            monobitView.UpdateSerializeViewMethod();
        }
    }

    ...

    // スクリプト Boo の同期処理を、Observed Component Registration List から削除します。
    public void Method_A()
    {
        // Boo のコンポーネントを取得します。
        UnityEngine.Component component = gameObject.GetComponent<Boo>();
 
        // Contains で見つかった場合、リストから削除するようにします。
        if (monobitView.ObservedComponents.Contains(component))
        {
            monobitView.ObservedComponents.Remove(component);

            // 削除内容を monobitView オブジェクトに反映させます。
            monobitView.UpdateSerializeViewMethod();
        }
    }

    ...
}


MonobitEngineBase.MonobitView.UpdateSerializeViewMethod メソッド

機能

  MonobitEngine.MonobitView.ObservedComponents プロパティ を用いて追加/削除したリストについて、
  オブジェクト同期通信制御自体に反映させます。

  このメソッドがコールされない限り、追加/削除した同期処理が反映されませんのでご注意ください。

引数

変数名 内容
- - -

戻り値

内容
void -

記述例

// 特定の同期オブジェクトに登録されているスクリプト Foo から、
// 同じオブジェクトに登録されているスクリプト Boo の同期処理を管理します。
//
// Foo クラス, Boo クラスともに MonobitEngine.MonoBehaviour を継承し、
// 加えて、Boo クラスには オブジェクト同期処理をするためのコールバックメソッドが実装済みであることを前提とします。

class Foo : MonobitEngine.MonoBehaviour 
{
    ...

    // スクリプト Boo の同期処理を、Observed Component Registration List に登録します。
    public void Method_A()
    {
        // Boo のコンポーネントを取得します。
        UnityEngine.Component component = gameObject.GetComponent<Boo>();
 
        // 二重登録を防止するため、Contains で見つからなかった場合、リストに登録するようにします。
        if (!monobitView.ObservedComponents.Contains(component))
        {
            monobitView.ObservedComponents.Add(component);

            // 登録内容を monobitView オブジェクトに反映させます。
            monobitView.UpdateSerializeViewMethod();
        }
    }

    ...

    // スクリプト Boo の同期処理を、Observed Component Registration List から削除します。
    public void Method_A()
    {
        // Boo のコンポーネントを取得します。
        UnityEngine.Component component = gameObject.GetComponent<Boo>();
 
        // Contains で見つかった場合、リストから削除するようにします。
        if (monobitView.ObservedComponents.Contains(component))
        {
            monobitView.ObservedComponents.Remove(component);

            // 削除内容を monobitView オブジェクトに反映させます。
            monobitView.UpdateSerializeViewMethod();
        }
    }

    ...
}