Fusion 2 とは?
概要
Fusion 1.1から2.0への変更点はこちらをご覧ください
Fusionは、Unity向けの新しい高性能な状態同期ネットワークライブラリです。一般的なUnityのワークフローに自然に統合できるようなシンプルさを念頭に構築され、データ圧縮・クライアントサイド予測(Client-Side Prediction)・ラグ補償(Lag Compensation)などの高度な機能を標準で提供しています。
Fusion内部では、最小のCPUオーバーヘッドで帯域幅を削減する最先端の圧縮アルゴリズムが使用されています。データは結果整合性(Eventual Consistency)のある部分的なチャンクで転送され、関心領域(Area Of Interest:AOI)の設定によって大人数のプレイヤーにも対応します。
Fusionは無料から開発できます。今日から制作を始めプロジェクトを公開して、無料枠を超えるほどゲームが人気になった時に料金が発生します。Fusionのプランによって、小規模なタイトルを大きく成長させることが可能です。
FusionのAPIは、UnityのMonoBehaviour
と似たコードで記述できるよう設計されています。例えば、RPCやネットワーク上の状態は、メソッドの属性やMonoBehaviour
のプロパティとして定義され、明示的なシリアライゼーションを必要としません。ネットワークオブジェクトはプレハブで定義することができ、Nested PrefabやPrefab Variantにも対応します。
Fusionでゲームプレイのコードを記述する基礎となるAPIは、入力・ネットワークプロパティ・RPCです。
ネットワークプロパティの使用例:
C#
[Networked] public int lives { get; set; }
入力の定義と設定(クライアントサイド予測による移動):
C#
public struct NetworkInputData : INetworkInput
{
public Vector3 direction;
}
public class InputPollBehaviour : SimulationBehaviour, INetworkRunnerCallbacks
{
...
public void OnInput(NetworkRunner runner, NetworkInput input)
{
var data = new NetworkInputData();
if (Input.GetKey(KeyCode.LeftArrow))
{
data.direction.x = -1;
}
// handle other directions
input.Set(data);
}
...
}
入力の使用例(クライアントサイド予測による移動):
C#
public override void FixedUpdateNetwork
{
if (GetInput(out NetworkInputData data))
{
data.direction.Normalize(); // normalize to prevent cheating with impossible inputs
_characterController.Move(5 * data.direction * Runner.DeltaTime);
}
}
リモートプロシージャコール(RPC)の宣言例:
C#
[Rpc(RpcSources.InputAuthority, RpcTargets.StateAuthority)]
public void RPC_Configure(string name, Color color)
{
playerName = name;
playerColor = color;
}
次のステップ
適切なネットワークトポロジーの選択
Fusionは同じAPIで、3つのまったく異なるネットワークトポロジーと、ネットワーク接続を行わないシングルプレイヤーモードに対応しています。あなたのゲームに合ったネットワークトポロジーを選択するガイドをご覧ください。
ネットワークトポロジーは、Fusionでは「モード」と呼ばれます。
ネットワークトポロジー
Fusionのサーバーモード・ホストモード・共有モードについては、ネットワークトポロジーをご覧ください。
チュートリアル
チュートリアルから始めてみましょう。サーバーモードとホストモードは、プログラミングのアプローチが同じなので、一つのチュートリアルにまとめられています。
Back to top