fusion | v2 switch to V1  

4 - ネットワークプロパティ

概要

このセクションでは、ネットワーク上で、レイヤーの位置に加えて、Networked Propertiesを使用し追加データを同期する方法についてご紹介しています。

ネットワークプロパティ

Fusionでは、NetworkObjects のTransformに、NetworkTransformコンポーネントを追加する際、同期を行います。 スクリプト内の変数などその他のステートは、ネットワーク上では同期されません。 ネットワーク上でステートを同期するには、[Networked]プロパティが必要になります。 ネットワークプロパティは、StateAuthorityからのステートをその他すべてのクライアントへ同期します。

全てのクライアント上でネットワークプロパティをアップデートしたい場合は、StateAuthority でのみのアップデートにするようにしてください。

シンプルなネットワークプロパティの事例としてプレイヤーの色があります。 まず、新しくスクリプトを作成して、 PlayerColorと名前を付けます。 オブジェクトの MeshRenderリファレンスにプロパティとパブリックフィールドを追加します。

using Fusion;
using UnityEngine;

public class Player : NetworkBehaviour 
{
    public MeshRenderer MeshRenderer;
    
    [Networked]
    public Color NetworkedColor { get; set; }
}

ネットワークプロパティは、{get; set;}などのプロパティ形式にする必要があり、通常のフィールドには対応していない点にご注意ください。

次に、アップデートでStateAuthorityが色を変更できるようにするコードを追加します。

void Update()
{
    if (Input.GetKeyDown(KeyCode.E))
    {
        //クライアントがボタンを押したときに実行されるコードであり、全てのクライアントで反映されるものではないので、ここでマテリアルの色を直接変更しても、効果がありません。
        NetworkedColor = new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f), 1f);
    }
}

ボタンが押されても、 MeshRenderの色は即座に変更されません。 その代わりに、ネットワークプロパティがアップデートされます。 そして、全てのクライアントで色の変更が複製されます。 あとは、各クライアントでネットワークプロパティへの変更を確認し、それぞれに応じてメッシュカラーを調整します。

Fusionでは、 ChangeDectorによってこれが行われます。 スクリプトにChangeDectorを新しく追加して、Spawnedで初期化します。以下を参照ください。

private ChangeDetector _changeDetector;

public override void Spawned()
{
    _changeDetector = GetChangeDetector(ChangeDetector.Source.SimulationState);
}

それから、Update関数の最後で以下を行います。

foreach (var change in _changeDetector.DetectChanges(this))
    {
        switch (change)
        {
            case nameof(NetworkedColor):
                MeshRenderer.material.color = NetworkedColor;
                break;
        }
    }

このコードで、最後の呼び出しからChangeDetectorNetworked Propertiesに生じた全ての変更がイテレートされます。 今回のケースでは、最後のUpdateからということになります。 クライアント上で色の値に加えられた変更が検知されると、MeshRendererがアップデートされます。

プレイヤーオブジェクトにPlayerColorコンポーネントを追加して、プレイヤー上でMeshRenderをリンクします。 再生モードを入力して、Eを押します。 編集ビューで色を変更しているプレイヤーを確認できます。 ここで、ビルドを作成してネットワーク上で適切に色が同期されていることを検証することもできます。

次は、 Shared Mode Basics 5 - リモートプロシージャコールです。

ドキュメントのトップへ戻る