ホームページ >バックエンド開発 >PHPチュートリアル >Workerman を使用して PHP と Unity3D でマルチプレイヤー オンライン パズル ゲームを実装する方法

Workerman を使用して PHP と Unity3D でマルチプレイヤー オンライン パズル ゲームを実装する方法

WBOY
WBOYオリジナル
2023-07-17 22:55:521367ブラウズ

Workerman を使用して PHP と Unity3D でマルチプレイヤー オンライン ジグソーパズル ゲームを実装する方法

概要:
マルチプレイヤー オンライン ゲームはゲーム開発の分野で常にホットなトピックであり、ジグソーパズルはオンライン ゲームの中でもカジュアル ゲームも人気です。この記事では、Workerman を使用してサーバーを構築し、PHP と Unity3D を使用してシンプルなマルチプレイヤー オンライン パズル ゲームを開発し、リアルタイムのゲーム インタラクションを実現する方法を紹介します。

  1. サーバーを構築する
    まず、ネットワーク サービスを提供するサーバーを構築する必要があります。 Workerman は、シンプルで効率的な PHP ソケット サーバー フレームワークであり、高いリアルタイム要件を持つネットワーク アプリケーションの構築に非常に適しています。 Composer を通じて Workerman をインストールできます:
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 関数では、クライアントから送信されたデータを処理し、対応する結果を返すことができます。

  1. Unity3D クライアント開発
    次に、Unity3D を使用してクライアント部分を開発します。まず、サーバーと通信するために WebSocketSharp プラグインを追加する必要があります。 Unity3D のアセット ストアを開き、WebSocketSharp を検索してダウンロードしてインストールします。

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 オブジェクトを作成し、接続アドレスをサーバーのアドレスとポートに設定しました。接続が開かれたとき、メッセージが受信されたとき、接続が閉じられたとき、エラーが発生したときなど、対応するコールバック関数で対応するロジックを処理できます。

  1. ジグソーパズルのロジックの実装
    ここで、ジグソーパズルのロジックの実装を開始できます。サーバーはクライアントから送信されたデータを受信すると、データを解析し、さまざまな指示に従って対応するゲーム操作を実行できます。クライアントから送信されるデータ形式はJSONであると仮定します。

サーバー側では、以下に示すように、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。