Network Behaviour
概要
NetworkBehaviourは、UnityのMonoBehaviourを継承したクラスで、以下の拡張が含まれています。
Runnerプロパティ(関連するNetworkRunnerの参照)Objectプロパティ(関連するNetworkObjectの参照)- ネットワークプロパティの処理
- RPCの処理
- イベント関数(
Spawned()、Despawned()、FixedUpdateNetwork()、Render()) - 権限周りのエイリアス(
HasStateAuthority、HasInputAuthority、IsProxy)
ネットワークオブジェクトには、NetworkBehaviourコンポーネントをいくつでも追加することができます。各NetworkBehaviourは、ネットワークオブジェクトの「状態(ネットワークプロパティ)」と「シミュレーション(FixedUpdateNetwork())」の一部を表します。
NetworkBehaviourId
有効なネットワークオブジェクトの全てのNetworkBehaviourコンポーネントは、ユニークな識別子を持ちます。この識別子は、ネットワークプロパティやRPCを持つNetworkBehaviourの参照として、ネットワーク上で同期されます。
ネットワークプロパティ(状態)
ネットワークプロパティは、NetworkBehaviourで[Networked]属性から定義されるプロパティです。これらのプロパティは、ネットワークオブジェクトの状態を表し、その値は状態権限者からその他全ての関心を持つピアに複製されます。ホストモードでは、サーバーが常に状態権限を持ちます。共有モードでは、各プレイヤーに状態権限が割り当てられます。
ネットワークプロパティの定義は、自動実装プロパティ(空の{ get; set; })を記述するのみです。
NetworkBehaviourでSpawned()が呼び出されるまで、ネットワークプロパティにアクセスすることはできません。
イベント関数
NetworkBehaviourは、いくつかのライフサイクルを管理するイベント関数を持ち、オーバーライドすることで実装を追加できます。
| 関数 | 説明 |
|---|---|
| FixedUpdateNetwork() | 固定周期のタイムステップで実行されるFusionのコールバックで、ティックごとに呼び出されます。主にゲームロジックのシミュレーションに使用されます。 UnityのFixedUpdate()のかわりに使用してください。 |
| Spawned() | ネットワークオブジェクトがNetworkRunnerに紐付けられた後に呼び出されます。ネットワークオブジェクトが初期化された後に呼び出されるため、ネットワークプロパティやRPCを使用可能です。 Start()のかわりに使用してください。 |
| Despawned(NetworkRunner runner, bool hasState) | ネットワークオブジェクトがデスポーンする前に呼び出されます。 OnDestroy()のかわりに使用してください。 --- NetworkRunner runner:ネットワークオブジェクトが属するNetworkRunner bool hasState:NetworkBehaviourの状態にまだアクセス可能かどうか |
| Render() | シミュレーション後にフレームごとに呼び出されるレンダリング用のコールバックで、全てのシミュレーション(FixedUpdateNetwork)が完了した後に実行されます。 Updateのかわりに使用してください。 |
FixedUpdateNetwork() (シミュレーション)
FixedUpdateNetwork()は、開発者が独自のシミュレーションのコードを実装する場所です。ここにプレイヤーの入力を使用して現在の状態を変更するコードを追加します。NetworkObject.IsInSimulationがtrueなら、そのオブジェクトの全てのNetworkBehaviourで、FixedUpdateNetwork()が毎ティック呼び出されます。全てのFixedUpdateNetwork()が実行された後に、全てのNetworkBehaviourの結果をまとめた状態が、そのティックでのオブジェクトのスナップショットになります。