This document is about: FUSION 1
SWITCH TO

このページは編集中です。更新が保留になっている可能性があります。

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

概要

ここでは、Networked Propertiesを使用して、プレイヤーの位置に加えてネットワーク上の追加データを同期する方法を説明します。

ネットワークプロパティ

Fusionは、NetworkObjectsNetworkTransformコンポーネントを追加すると、そのトランスフォームを同期させます。スクリプトの変数などの他の状態は、ネットワーク上で同期されません。ネットワーク上で状態を同期させるには、[Networked] プロパティが必要です。Networkedプロパティは、StateAuthorityから他のすべてのクライアントに状態を同期さ せます。

クライアントが StateAuthority を持たないオブジェクトの Networked Property を変更した場合、その変更はネットワーク上で同期されるのではなく、ローカルな予測として適用され、将来 StateAuthority からの変更によって上書きさ れます。すべてのクライアントで更新したい場合は、StateAuthorityのNetworked Propertiesだけを更新してください。

ネットワークプロパティの簡単な例としては、プレイヤーの色があります。まず、新しいスクリプトを作成し、PlayerColorという名前を付けます。ネットワークプロパティを追加し、オブジェクトの MeshRender を参照するためのパブリックフィールドを追加します。

C#

using Fusion;
using UnityEngine;

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

Networked Propertiesはプロパティ({get; set;})でなければならないので、通常のフィールドは対応していないことに注意してください。

次にUpdateで、StateAuthorityが色を変更できるようにするコードを追加します:

C#

void Update()
{
    if (Input.GetKeyDown(KeyCode.E))
    {
        // Changing the material color here directly does not work since this code is only executed on the client pressing the button and not on every client.
        NetworkedColor = new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f), 1f);
    }
}

ボタンが押されても、MeshRenderの色はすぐには変わりません。その代わりに、Networked Propertyが更新されます。そうすることで、色の変化はすべてのクライアントに再現されます。あとは、各クライアントがNetworked Propertyの変更をチェックし、それに応じてメッシュの色を調整することになります。

Fusionでは、これを ChangeDetector を使って行います。スクリプトに新しいChangeDectorフィールドを追加し、Spawnedで初期化し、Networked Propertyが変更されたときにトリガーされるコールバック関数を追加してください:

C#

private NetworkBehaviourChangeDetector _changeDetector;

public override void Spawned()
{
        _changeDetector = GetChangeDetector();
        _changeDetector.RegisterCallback(this, nameof(NetworkedColor), NetworkColorChanged);
}

private void NetworkColorChanged()
{
    MeshRenderer.material.color = NetworkedColor;
}

次に、Updateで、変更検出器で変更の有無を確認します:

C#

// check if the network property changed.
_changeDetector.DetectChanges(this);

プレイヤーオブジェクトにPlayerColorコンポーネントを追加し、補間対象からMeshRenderをリンクさせます。プレイモードに入り、Eを押してください。エディットビューでプレイヤーが色を変えていることが確認できます。この時点で、ビルドを作成して、ネットワーク上で色が正しく同期されていることを確認することもできます。

次ページ Fusion 105 Shared

Back to top