Cara PHP dan Unity3D menggunakan Workerman untuk melaksanakan fungsi ranking masa nyata
Dengan peningkatan permainan dalam talian, fungsi ranking telah menjadi tumpuan ramai pembangun permainan. Kedudukan masa nyata membolehkan pemain bersaing dan membandingkan, menjadikan permainan lebih menarik dan mencabar. Artikel ini akan memperkenalkan cara menggunakan rangka kerja PHP, Unity3D dan Workerman untuk melaksanakan fungsi ranking masa nyata.
1. Fahami rangka kerja Workerman
Workerman ialah rangka kerja PHP tak segerak berprestasi tinggi yang dibangunkan dalam PHP. Ia menggunakan model I/O berbilang proses dan tidak menyekat, mempunyai jejak memori yang rendah dan keupayaan pemprosesan sambungan serentak yang tinggi. Ciri Workerman menjadikannya sesuai untuk membina aplikasi masa nyata, seperti pelayan permainan.
2. Bina bahagian pelayan
Pertama, kita perlu memasang rangka kerja Workerman di bahagian pelayan. Ia boleh dipasang dengan arahan berikut:
composer require workerman/workerman
Buat skrip PHP pada pelayan, seperti rank_server.php. Dalam skrip ini, kita perlu memulakan Workerman, menentukan tatasusunan kedudukan dan menyediakan beberapa antara muka untuk pelanggan Unity3D untuk memanggil.
Berikut ialah kod contoh ringkas:
<?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();
Kod di atas mencipta tika Pekerja dan mendengar port 2345. Dalam fungsi panggil balik onWorkerStart, kami memulakan tatasusunan kedudukan. Dalam fungsi panggil balik onMessage, pemprosesan yang sepadan dilakukan mengikut permintaan yang diterima: jika ia adalah permintaan untuk mengemas kini senarai kedudukan, tatasusunan kedudukan dikemas kini jika ia adalah permintaan untuk mendapatkan senarai kedudukan, tatasusunan ranking dihantar kepada klien. Ambil perhatian bahawa semasa mengemas kini papan pendahulu, kami menggunakan $rankList[$request['username']] = $request['score'] untuk menyimpan skor pengguna.
3. Tulis klien
Gunakan WebSocket dalam Unity3D untuk menyambung ke pelayan Kami boleh menggunakan pemalam pihak ketiga seperti WebSocket-Sharp. Pertama, anda perlu mengimport pemalam WebSocket-Sharp dalam editor Unity3D. Kemudian rujuk ruang nama WebSocket dalam kod anda.
using WebSocketSharp;
Berikut ialah contoh kod untuk pelanggan papan pendahulu Unity3D yang mudah:
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); } }
Kod di atas mencipta contoh WebSocket dalam fungsi Mula dan bersambung ke pelayan. Dalam fungsi panggil balik OnOpen, kami boleh mengendalikan kejayaan sambungan. Dalam fungsi panggil balik OnMessage, kami menerima data kedudukan yang dihantar oleh pelayan dan memprosesnya dengan sewajarnya. Dalam fungsi UpdateRank dan GetRank, kami menghantar permintaan kepada pelayan untuk mengemas kini kedudukan dan mendapatkan kedudukan.
4. Jalankan ujian
Laksanakan arahan berikut dalam baris arahan untuk memulakan pelayan:
php rank_server.php start
, buat adegan Unity3D dan tambahkannya dalam Tambah skrip RankClient ke tempat kejadian. Dalam skrip, anda boleh menguji ini dengan memanggil fungsi UpdateRank dan GetRank. Kedudukan boleh dikemas kini berdasarkan logik permainan dan data kedudukan terkini boleh diperolehi.
Melalui gabungan PHP dan Unity3D dengan rangka kerja Workerman, kami boleh melaksanakan fungsi ranking masa nyata dengan mudah. Prestasi tinggi Workerman dan ciri didorong peristiwa tak segerak membolehkan kami bertindak balas dengan pantas dan mengendalikan sejumlah besar permintaan pengguna serta memberikan pengalaman permainan yang lebih baik. Semoga artikel ini dapat membantu anda!
Atas ialah kandungan terperinci Cara PHP dan Unity3D menggunakan Workerman untuk melaksanakan fungsi ranking masa nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!