Roblox: クライアント-サーバー間の通信方法①(Client-Serverモデル)
今回はRobloxでクライアント側のLocalScriptとサーバー側のScriptで情報をやり取りする際の方法についてご紹介していこうと思います!
このテーマは導入から説明すると長くなるので、今回含め全3回に分けて書いていきます。
全3回のアウトラインは以下のようになります。
- Client-Serverモデル: Robloxにおけるクライアントとサーバー間のルール←今回のテーマ
- RemoteEvent: クライアントとサーバー間の一方向の通信について
- RemoteFunction: クライアントとサーバー間の双方向の通信方法について
今回の記事は総じてドキュメントがとても理解しやすいので、この内容を元にまとめていこうと思います。
Robloxの原則:Client-Serverモデル
まず前提として、Robloxでは基本的にサーバーとクライアントが分離されて互いに直接アクセスできないClient-Serverモデル が採用されており、サーバー側にゲームの状態を管理する最終権限を持たせています。
また、ゲームの一貫性を保つためにも基本的にサーバーとクライアントを分離して、それぞれの場所で処理を独立して実行させるようになっています。
Client-Serverモデルのメリット
これの互いに分離させるモデルのメリットは以下です。
- 不正防止: クライアントが直接サーバーデータにアクセスできると、チートやハッキングが容易になってしまいます。
- データ保護: プレイヤーの個人情報や重要なゲームデータをサーバー側で保護できます。
- 同期の確保: サーバーが全クライアントの状態を管理し、必要な情報のみを各クライアントに送信することで、ゲーム全体の同期を維持します。
クライアントとサーバーの通信を実現させる手段
しかしゲーム開発において、クライアントとサーバー間で通信が必要になるケースは多々あります。
- プレイヤーのレベルアップの管理
- プレイヤーのアイテム使用情報の管理
- プレイヤーのキー入力操作の受信
などなど。
Robloxではこういった通信が必要な際だけ通信可能にする機能が用意されています。今回はその中でもよく使われるRemoteEvent
とRemoteFuncion
についてご紹介していきます。
RemoteEvent
とRemoteFunction
の特徴
それぞれの特徴は以下です。
-
RemoteEvent
: サーバーとクライアントの一方向の通信に使用され、非同期で実行される。 -
RemoteFunction
: サーバーとクライアントの双方向の通信に使用され、送信側は応答を待機する。
ここでの重要な違いは、RemoteEvent
は送信して終わりなのに対して、RemoteFunction
は相手側のレスポンスを待つという点です。
次回からはこの違いを踏まえてそれぞれの使い方を見ていこうと思います。
まとめ
今回は、実際にクライアントとサーバー間の通信方法を紹介するにあたって必要となる、RobloxのClient-Serverモデルについて紹介しました。
次の記事では実際にRemoteEvent
の解説と、シチュエーションごとのサンプルコードを紹介します!
Discussion