4 - ネットワークプロパティ
概要
ここでは、Networked Properties
を使用して、プレイヤーの位置に加えてネットワーク上の追加データを同期する方法を説明します。
ネットワークプロパティ
Fusionは、NetworkObjects
にNetworkTransform
コンポーネントを追加すると、そのトランスフォームを同期させます。スクリプトの変数などの他の状態は、ネットワーク上で同期されません。ネットワーク上で状態を同期させるには、[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