Godot で Photon Realtime を使ってみる
この記事は Godot Engine Advent Calendar 2023 14日目の記事です。
はじめに
ちょっとした小ネタです。
書いてみたら思ったほど書くことが無かったので Godot で Photon Realtime が動くということだけ先に書いておきます。
ここまでで読むのを止めても良いでしょう。
Godot では、公式に C# バインディングがサポートされており、 .NET 6.0 に対応しています。
(コミュニティによって Rust バインディングなども提供されています。)
つまり、 .NET 6 で利用できるライブラリなら大体何でも動きそうですね。
Photon Realtime
Unity でマルチプレイヤーオンラインゲームを開発したことがある人ならご存じの人が多いと思いますが、マルチプレイの通信に利用できる SaaS として Photon というものがあります。
Photon にも色々サービスの種類(Fusion や Quantum など)がありますが、今回は Photon Realtime という最もプレーンなリアルタイム通信サーバーを利用する例を紹介します。
Godot で Photon Realtime SDK を導入する
Photon の Fusion や PUN2 などは、 Unity に依存しているため Godot では利用できませんが、 Realtime は .NET 用の SDK が提供されており、利用可能なことが期待できます。
.NET 用の SDK は こちら からダウンロードできます。
ダウンロードした SDK をプロジェクトの適切な場所に配置したら、 csproj
に以下のように SDK の dll を指定してあげるだけです。以上!
<ItemGroup>
<Reference Include="Photon-NetStandard Version=4.1.7.0">
<HintPath>./Photon/libs/Release/netstandard2.0/Photon-NetStandard.dll</HintPath>
</Reference>
</ItemGroup>
あとは Unity で利用するときと同じように、 Photon の IConnectionCallbacks
や IMatchmakingCallbacks
を実装したクラスを用意し、利用時に _Process
など毎フレーム呼ばれるメソッドで Photon.Realtime.LoadBalancingClient.Service
メソッドを呼び出すようにするだけです。
例えばこんな感じです。
using Godot;
using Photon.Realtime;
public partial class MyNode : Node, IConnectionCallbacks
{
private readonly LoadBalancingClient _client = new();
public override void _Ready()
{
_client.AddCallbackTarget(this);
_client.ConnectUsingSettings(new AppSettings
{
AppIdRealtime = "YourAppId"
});
}
public override void _Process(double delta)
{
_client.Service();
}
#region IConnectionCallbacks implementation
public void OnConnected()
{
GD.Print("OnConnected!");
}
public void OnConnectedToMaster()
{
GD.Print("OnConnectedToMaster!");
_client.OpJoinOrCreateRoom(new EnterRoomParams
{
RoomName = "MyRoom",
RoomOptions = new RoomOptions
{
PublishUserId = true
}
});
}
public void OnDisconnected(DisconnectCause cause)
{
GD.Print("OnDisconnected!");
}
// 省略
#endregion
}
まとめ
Godot でも Photon Realtime を利用できます。
Discussion