PHP と Unity3D が Workerman を使用してリアルタイム ランキング機能を実装する方法
オンライン ゲームの台頭により、ランキング機能が多くのゲーム開発者の注目を集めるようになりました。リアルタイムのランキングにより、プレイヤーは競争したり比較したりできるため、ゲームがより面白く、やりがいのあるものになります。この記事では、PHP、Unity3D、Workermanフレームワークを使ってリアルタイムランキング機能を実装する方法を紹介します。
1. Workerman フレームワークを理解する
Workerman は、PHP で開発された高性能の非同期イベント駆動型 PHP フレームワークです。マルチプロセスおよびノンブロッキング I/O モデルを採用しており、メモリ フットプリントが低く、高い同時接続処理能力を備えています。 Workerman の機能は、ゲーム サーバーなどのリアルタイム アプリケーションの構築に最適です。
2. サーバー側の構築
まず、サーバー側に Workerman フレームワークをインストールする必要があります。次のコマンドを使用してインストールできます。
composer require workerman/workerman
サーバー上に、rank_server.php などの PHP スクリプトを作成します。このスクリプトでは、Workerman を初期化し、ランキング配列を定義し、Unity3D クライアントが呼び出すためのいくつかのインターフェイスを提供する必要があります。
以下は簡単なサンプル コードです:
<?php require_once __DIR__.'/vendor/autoload.php'; use WorkermanWorker; $rankList = array(); $worker = new Worker("websocket://0.0.0.0:2345"); $worker->count = 4; $worker->onWorkerStart = function($worker) { global $rankList; echo "Worker started! "; }; $worker->onMessage = function($connection, $data) { global $rankList; $request = json_decode($data, true); switch($request['action']) { case 'update_rank': $rankList[$request['username']] = $request['score']; break; case 'get_rank': krsort($rankList); $rankList = array_slice($rankList, 0, 10); $connection->send(json_encode($rankList)); break; default: break; } }; Worker::runAll();
上記のコードは Worker インスタンスを作成し、ポート 2345 をリッスンします。 onWorkerStart コールバック関数で、ランキング配列を初期化します。 onMessage コールバック関数では、受信したリクエストに応じて、ランキングリストの更新リクエストであればランキング配列を更新、ランキングリストの取得リクエストであればランキング配列を送信するなど、対応する処理が行われます。クライアントに。リーダーボードを更新するときは、$rankList[$request['username']] = $request['score'] を使用してユーザー スコアを保存することに注意してください。
3. クライアントを作成します
Unity3D で WebSocket を使用してサーバーに接続します。 WebSocket-Sharp などのパーティ プラグイン。まず、WebSocket-Sharp プラグインを Unity3D エディターにインポートする必要があります。次に、コード内で WebSocket 名前空間を参照します。
using WebSocketSharp;
以下は、Unity3D ランキング クライアントの簡単なサンプル コードです。
using System.Collections; using UnityEngine; using WebSocketSharp; public class RankClient : MonoBehaviour { private WebSocket ws; private string serverUrl = "ws://127.0.0.1:2345"; void Start() { ws = new WebSocket(serverUrl); ws.OnOpen += OnOpen; ws.OnMessage += OnMessage; ws.Connect(); } void OnOpen(object sender, System.EventArgs e) { Debug.Log("WebSocket connected!"); } void OnMessage(object sender, MessageEventArgs e) { string msg = e.Data; // 接收到服务器发送的排行榜数据,进行处理 // ... } public void UpdateRank(string username, int score) { // 向服务器发送更新排行榜请求 string json = "{"action":"update_rank", "username":"" + username + "", "score":" + score + "}"; ws.Send(json); } public void GetRank() { // 向服务器发送获取排行榜请求 string json = "{"action":"get_rank"}"; ws.Send(json); } }
上記のコードは、開始関数 WebSocket インスタンスを作成し、サーバーに接続します。 OnOpen コールバック関数で、接続の成功を処理できます。 OnMessage コールバック関数では、サーバーから送信されたランキング データを受信し、それに応じて処理します。 UpdateRank 関数と GetRank 関数では、サーバーにリクエストを送信してランキングを更新し、ランキングを取得します。
4. テスト実行
コマンド ラインで次のコマンドを実行してサーバーを起動します:
php rank_server.php start
Unity3D エディターでランキング シーンを作成し、RankClient スクリプトをシーンに追加します。スクリプトで、UpdateRank 関数と GetRank 関数を呼び出すことでこれをテストできます。ゲームロジックに基づいてランキングを更新し、最新のランキングデータを取得できます。
PHP と Unity3D を Workerman フレームワークと組み合わせることで、リアルタイム ランキング機能を簡単に実装できます。 Workerman の高いパフォーマンスと非同期イベント ドリブン機能により、多数のユーザー リクエストに迅速に対応して処理し、より良いゲーム エクスペリエンスを提供できます。この記事がお役に立てば幸いです!
以上がPHP と Unity3D が Workerman を使用してリアルタイム ランキング機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。