GameLiftとは
https://aws.amazon.com/jp/gamelift/
手順
-
UnityでNugetを使用
-
Nugetで次のライブラリをインポート
- AWSSDK.Core (C#のAWS SDK のベース)
- AWSSDK.GameLift ( GameLift API呼び出すためのC# AWS SDK)
-
GameLift Realtime Client SDK の組み込み
- https://aws.amazon.com/jp/gamelift/getting-started/ ここからDL
- READMEを読む
- VSCodeでsln開いてビルド
- ビルドで出来上がったライブラリをAssets/Plugins にコピー (拡張子DLLのもの)
- GameLiftRealtimeClientSdkNet45/bin/Debug
-
スクリプト作成
- https://qiita.com/nimitsu/items/4b3858a1d06cbdc3ea01 を参考に、 RealTimeClient ラッパー と それを使用するLobbyコードを作成
# コード
リアルタイムサーバースクリプトコードについて
https://docs.aws.amazon.com/ja_jp/gamelift/latest/developerguide/realtime-script-objects.html
末尾のエクスポートで、各操作に対応する関数を関連付け
exports.ssExports = {
init: init,
onProcessStarted: onProcessStarted,
onStartGameSession: onStartGameSession,
onProcessTerminate: onProcessTerminate,
onPlayerConnect: onPlayerConnect,
onPlayerAccepted: onPlayerAccepted,
onPlayerDisconnect: onPlayerDisconnect,
onPlayerJoinGroup: onPlayerJoinGroup,
onPlayerLeaveGroup: onPlayerLeaveGroup,
onSendToPlayer: onSendToPlayer,
onSendToGroup: onSendToGroup,
onMessage: onMessage,
onHealthCheck: onHealthCheck
};
定義された関数
init(rtsession)
# 初期化時に実行され、リアルタイムサーバーへのインターフェース(rtsession)を受け取る
onStartGameSession(session)
# 新しいゲームセッションが開始されてゲームセッションオブジェクトを渡された時実行
# 関数内で tickLoop(); を呼び出し監視することで、アクティブプレイヤーが0人の時に離脱する設定が可能
onPlayerAccepted(player)
onPlayerDisconnect(peerId)
# プレイヤーが接続し、ルームに入った時に呼び出し(その逆も)
onMessage(gameMessage)
# メッセージを受信した時
# 大抵はメッセージの種類で場合分する
switch (gameMessage.opCode) {
case SendTest1: {
// do operation 1 with gameMessage.payload for example sendToGroup
const outMessage = session.newTextGameMessage(RecieveTest1, session.getServerId(), gameMessage.payload);
session.sendGroupMessage(outMessage, -1);
break;
}
case SendTest2: {
// do operation 1 with gameMessage.payload for example sendToGroup
const outMessage = session.newTextGameMessage(RecieveTest2, session.getServerId(), gameMessage.payload);
session.sendGroupMessage(outMessage, -1);
break;
}
}
}
rtSession.sendGroupMessage(gameMessage, targetGroup)
rtSession.sendReliableMessage(gameMessage, targetGroup)
# TCP or UDPで対象のグループにメッセージを送信
リアルタイムクライアントコードについて
ビルドエラーについて
Microsoft.CodeAnalysis を参照する AWSSDK.GameLift.CodeAnalysis をビルド時に除去することでビルド成功した(動くんだろうか…)
クライアントでやること
- 部屋の作成 → 部屋に参加
- 部屋の検索 → 部屋に参加
参考
1.GameLift RealTimeServerで遊んでみよう for Unity(AWS設定編) - Qiita https://qiita.com/nimitsu/items/61cf2b177c10b59ebd3f