Workerman を使用して PHP と Unity3D でマルチプレイヤー オンライン ジグソーパズル ゲームを実装する方法
概要:
マルチプレイヤー オンライン ゲームはゲーム開発の分野で常にホットなトピックであり、ジグソーパズルはオンライン ゲームの中でもカジュアル ゲームも人気です。この記事では、Workerman を使用してサーバーを構築し、PHP と Unity3D を使用してシンプルなマルチプレイヤー オンライン パズル ゲームを開発し、リアルタイムのゲーム インタラクションを実現する方法を紹介します。
composer require workerman/workerman
次に、サーバー側の PHP ファイルserver.php を作成し、その中で Workerman を初期化し、Worker オブジェクトを作成します:
<?php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; // 创建一个Worker监听8080端口 $worker = new Worker('websocket://0.0.0.0:8080'); // 设置监听的连接数 $worker->count = 4; // 当收到客户端发来的数据时 $worker->onMessage = function ($connection, $data) { // 处理接收到的数据 // ... }; // 运行Worker Worker::runAll();
In上記のコードでは、Worker オブジェクトを作成し、そのリッスン アドレスをローカルホストのポート 8080 に設定し、サーバーがこのポートでリッスンしてサービスを提供することを示しています。同時に、サーバーが複数のクライアント要求を並行して処理できるように、ワーカー プロセスの数も 4 に設定します。 onMessage 関数では、クライアントから送信されたデータを処理し、対応する結果を返すことができます。
Unity3D では、新しいシーンを作成し、メイン ロジック制御スクリプトのコンテナとして空のゲームオブジェクトを追加します。次に、この GameObject にメイン ロジック制御スクリプト コードを追加します。
using UnityEngine; using WebSocketSharp; public class PuzzleGameClient : MonoBehaviour { private WebSocket ws; private void Start() { // 连接到服务器 ws = new WebSocket("ws://localhost:8080"); ws.OnOpen += OnOpen; ws.OnMessage += OnMessage; ws.OnClose += OnClose; ws.OnError += OnError; ws.Connect(); } private void OnOpen(object sender, System.EventArgs e) { Debug.Log("Connected to server"); } private void OnMessage(object sender, MessageEventArgs e) { Debug.Log("Received message from server: " + e.Data); // 处理接收到的数据 // ... } private void OnClose(object sender, CloseEventArgs e) { Debug.Log("Disconnected from server"); } private void OnError(object sender, ErrorEventArgs e) { Debug.Log("Error: " + e.Message); } private void OnDestroy() { // 断开与服务器的连接 ws.Close(); } }
上記のコードでは、スクリプトの Start 関数で WebSocket オブジェクトを作成し、接続アドレスをサーバーのアドレスとポートに設定しました。接続が開かれたとき、メッセージが受信されたとき、接続が閉じられたとき、エラーが発生したときなど、対応するコールバック関数で対応するロジックを処理できます。
サーバー側では、以下に示すように、server.php ファイルの onMessage 関数を変更して、受信したデータを処理できます。
$worker->onMessage = function ($connection, $data) { // 将JSON数据解析为关联数组 $json = json_decode($data, true); // 根据不同的指令进行相应的处理 switch ($json['command']) { case 'move': // 执行移动操作 // ... break; case 'finish': // 完成拼图 // ... break; // ... } // 发送结果给客户端 $result = ['status' => 'success']; $connection->send(json_encode($result)); };
クライアント側では、次のことができます。受信したデータを処理します。 以下に示すように、受信したメッセージの OnMessage メソッドで JSON データを解析し、対応するゲーム操作を実行します。
private void OnMessage(object sender, MessageEventArgs e) { Debug.Log("Received message from server: " + e.Data); var json = JsonUtility.FromJson<GameMessage>(e.Data); // 根据不同的指令进行相应的处理 switch (json.command) { case "move": // 执行移动操作 // ... break; case "finish": // 完成拼图 // ... break; // ... } // 发送结果给服务器 var result = new GameResult { status = "success" }; ws.Send(JsonUtility.ToJson(result)); }
上記のコードでは、受信した JSON データを GameMessage オブジェクトに解析し、異なる命令に従って対応するゲーム操作を実行し、対応する処理ロジックを実行します。最後に、処理結果を GameResult オブジェクトにカプセル化し、サーバーに送信します。
上記の手順を完了すると、Unity エディターでゲームを実行できるようになります。複数のクライアントがサーバーに接続されている場合、パズルを同時にプレイし、リアルタイムで対話することができます。
概要:
この記事では、Workerman を使用して PHP サーバーを構築し、Unity3D を使用してマルチプレイヤー オンライン パズル ゲームを開発する方法を紹介します。クライアントとサーバー間の通信は WebSocket プラグインを介して実装され、ゲーム ロジックの対話は JSON データ交換を介して実装されました。マルチプレイヤーオンラインゲーム開発に興味がある場合は、上記の内容に従って実践し、プロジェクトをさらに拡張および最適化することができます。
以上がWorkerman を使用して PHP と Unity3D でマルチプレイヤー オンライン パズル ゲームを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。