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
の結果をまとめた状態が、そのティックでのオブジェクトのスナップショットになります。