Comment utiliser Workerman pour implémenter un jeu de puzzle multijoueur en ligne en PHP et Unity3D
Présentation :
Les jeux en ligne multijoueurs ont toujours été un sujet brûlant dans le domaine du développement de jeux, et les puzzles, en tant que jeu occasionnel simple et intéressant, se jouent également en ligne. Très populaire en Chine. Cet article expliquera comment utiliser Workerman pour créer un serveur et utiliser PHP et Unity3D pour développer un jeu de puzzle en ligne multijoueur simple afin d'obtenir une interaction de jeu en temps réel.
composer require workerman/workerman
Ensuite, nous créons un fichier PHP côté serveur server.php, y initialisons Workerman et créons un objet 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();
Dans le code ci-dessus, nous créons un objet Worker, et définissez son adresse d'écoute sur le port 8080 de localhost, indiquant que le serveur écoutera et fournira des services sur ce port. Dans le même temps, nous définissons également le nombre de processus Worker sur 4 afin que le serveur puisse gérer plusieurs requêtes clients en parallèle. Dans la fonction onMessage, nous pouvons traiter les données envoyées par le client et renvoyer les résultats correspondants.
Dans Unity3D, nous créons une nouvelle scène et ajoutons un GameObject vide comme conteneur pour le script de contrôle logique principal. Ensuite, nous ajoutons le code du script de contrôle logique principal à ce 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(); } }
Dans le code ci-dessus, nous avons créé un objet WebSocket dans la fonction Start du script et défini l'adresse de connexion sur l'adresse et le port du serveur. Lorsqu'une connexion est ouverte, qu'un message est reçu, qu'une connexion est fermée, qu'une erreur se produit, etc., nous pouvons traiter la logique correspondante dans la fonction de rappel correspondante.
Côté serveur, on peut modifier la fonction onMessage du fichier server.php pour traiter les données reçues comme suit :
$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)); };
Côté client, on peut analyser les données JSON dans la méthode OnMessage qui traite les données reçues message et effectuons les opérations de jeu correspondantes, comme indiqué ci-dessous :
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)); }
Dans le code ci-dessus, nous analysons les données JSON reçues dans un objet GameMessage et exécutons la logique de traitement correspondante selon différentes instructions. Enfin, nous encapsulons le résultat du traitement dans un objet GameResult et l'envoyons au serveur.
Après avoir terminé les étapes ci-dessus, nous pouvons exécuter le jeu dans l'éditeur Unity. Lorsque plusieurs clients sont connectés au serveur, ils peuvent jouer à des puzzles simultanément et interagir en temps réel.
Résumé :
Cet article explique comment utiliser Workerman pour créer un serveur PHP et utiliser Unity3D pour développer un jeu de puzzle multijoueur en ligne. Nous avons implémenté la communication entre le client et le serveur via le plug-in WebSocket et implémenté l'interaction de la logique du jeu via l'échange de données JSON. Si vous êtes intéressé par le développement de jeux en ligne multijoueurs, vous pouvez vous entraîner selon le contenu ci-dessus et développer et optimiser davantage le projet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!