Network Technology ၏စဉ်ဆက်မပြတ်ဖွံ့ဖြိုးတိုးတက်မှုနှင့်အတူ Real-Time Battle Games သည်ကစားသမားများစွာ၏အကြိုက်ဆုံးဂိမ်းအမျိုးအစားဖြစ်လာသည်။ အစွမ်းထက်သော side side scripting language တစ်ခုအနေဖြင့် PHP သည် Retury3D ကဲ့သို့သော Cross-platform ဂိမ်းအင်ဂျင်များနှင့်ကစားရန်အချိန်ကောင်းစစ်တိုက်ဂိမ်းကစားနည်းများကိုဖန်တီးရန်ပေါင်းစပ်ထားသည်။ ဤဆောင်းပါးသည် Real-Time Battle ဂိမ်းတစ်ခုတည်ဆောက်ရန်အတွက်အချိန်နှင့်တပြေးညီကစားနည်းများအကြားအချိန်မီဆက်သွယ်မှုနှင့်အပြန်အလှန်ဆက်သွယ်မှုကိုကြည့်ရှုရန် PHP ရှိ Workerman စာကြည့်တိုက်ကို PHP တွင်မည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။
ပထမ ဦး စွာကျွန်ုပ်တို့သည် Workerman စာကြည့်တိုက်ကို install လုပ်ရန်လိုအပ်သည်။ Workerman ကို install လုပ်ရန် command line မှအောက်ပါ command ကို run ပါ။
composer require workerman/workerman
ဂိမ်း၏ဆာဗာဘက်ကိုအကောင်အထည်ဖော်ရန်တာ 0 န်ယူသည့်ဆာဗာအမည်ရှိ PHP ဖိုင်ကိုဖန်တီးပါ။ ပထမ ဦး စွာအလုပ်ရှင်၏အလိုအလျောက်တင်ထားသောဖိုင်ကိုမိတ်ဆက်ပေးပါ။
require_once __DIR__ . '/vendor/autoload.php';
ထို့နောက်ဝက်ဘ်ဆိုက်ဝက်ဘ်ဆိုဒ်တစ်ခုတည်ဆောက်ပြီး port 2345 ကိုနားထောင်ပါ။
use Workerman\Worker;
$ws_worker = new Worker("websocket://0.0.0.0:2345");
$ws_worker->count = 4;
$ws_worker->onMessage = function($connection, $data) {
// ကစားသမားများကပေးပို့သောမက်ဆေ့ခ်ျများ
// ...
};
Worker::runAll();
ဤကုဒ်တွင် WebSoet protocol ကိုနားထောင်ခြင်းနှင့်ဆိပ်ကမ်း 2345 ကို Binding လုပ်သည့်အလုပ်သမားဥပမာတစ်ခုဖန်တီးသည်။ တစ်ချိန်တည်းမှာပင်အလုပ်သမားလုပ်ငန်းစဉ်နံပါတ်ကို 4 မှ 4 နှင့် player ၏မက်ဆေ့ခ်ျများကိုတင်ပါ။
UNITY3D တွင်မြင်ကွင်းတစ်ခုကို ဖန်တီး. Cube အရာဝတ်ထုတစ်ခုကိုထည့်ပါ။ ထို့နောက် C # script ဟုခေါ်သော C # script ကိုဖန်တီးပါ။ server ထဲရှိဆာဗာဘေးတွင်ဆက်သွယ်ရေးယုတ္တိဗေဒကိုအကောင်အထည်ဖော်ပါ။
using UnityEngine;
using WebSocketSharp;
public class GameClient : MonoBehaviour
{
private WebSocket webSocket;
private void Start()
{
webSocket = new WebSocket("ws://localhost:2345");
webSocket.OnMessage += OnMessageReceived;
webSocket.Connect();
}
private void OnDestroy()
{
webSocket.Close();
}
private void OnMessageReceived(object sender, MessageEventArgs e)
{
// လက်ခံရရှိမက်ဆေ့ခ်ျကို process
// ...
}
private void Update()
{
// ဆာဗာသို့စာတစ်စောင်ပို့ပါ
// ...
}
}
ဤကုဒ်တွင်ဆာဗာလိပ်စာနှင့် port ကိုသတ်မှတ်သည့် websocket ဥပမာတစ်ခုဖန်တီးသည်။ လက်ခံရရှိသည့်မက်ဆေ့ခ်ျကို onmessage event callback function ကိုချည်နှောင်ခြင်းအားဖြင့်ပြုလုပ်ထားပြီး,
ဆာဗာဘေးထွက်ကုဒ်တွင်ကစားသမားတစ် ဦး စီကိုကစားသမားတစ် ဦး ချင်းစီအတွက်ထူးခြားသောအမှတ်အသားတစ်ခုသတ်မှတ်နိုင်သည်။ 0 န်ဆောင်မှုခံယူသူကုဒ်တွင်ဆာဗာသည်ကစားသမားကိုခွဲခြားသတ်မှတ်နိုင်ရန်မက်ဆေ့ခ်ျပို့သောအခါအမှတ်အသားကိုသယ်ဆောင်သည်။
ဆာဗာ - ဘေးထွက်ကုဒ်ဥပမာ:
$ws_worker->onMessage = function($connection, $data) {
$clientId = $connection->id;
// ကစားသမားများကပေးပို့သောမက်ဆေ့ခ်ျများ
// ...
};
client code support:
private void Update()
{
// ဆာဗာသို့စာတစ်စောင်ပို့ပါ
webSocket.Send("Player: " + playerId + " message");
}
အထက်ပါကုဒ်များမှတစ်ဆင့်ကျွန်ုပ်တို့သည်ကစားသမားမျိုးစုံအကြားအချိန်နှင့်တပြေးညီဆက်သွယ်မှုကိုနားလည်ပြီးရိုးရိုးအချိန်နှင့်အမျှစစ်တိုက်ပွဲဖြစ်ပွားသည့်ပွဲတစ်ပွဲကိုတည်ဆောက်ကြသည်။
ဤဆောင်းပါးသည် Workerman စာကြည့်တိုက်ကို PHP တွင်မည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးသည်။ PHP နှင့် Unity3D ပေါင်းစပ်ခြင်းအားဖြင့်ကစားသမားများစွာအကြားအချိန်နှင့်တပြေးညီဆက်သွယ်ရေးနှင့်အပြန်အလှန်ဆက်သွယ်မှုကိုကျွန်ုပ်တို့နားလည်သဘောပေါက်နိုင်ပြီးကစားသမားများကိုအားကစားသမားများကြုံတွေ့နေရသည်။ ဟုတ်ပါတယ်, အထက်ပါကုဒ်သည်ရိုးရှင်းသောဆန္ဒပြပွဲတစ်ခုသာဖြစ်ပြီးအမှန်တကယ်ဂိမ်းဖွံ့ဖြိုးတိုးတက်မှုအတွက်လိုအပ်ချက်များနှင့်အညီတိုးချဲ့ရန်နှင့်အလွယ်တကူအလွယ်တကူပြုလုပ်ရန်လိုအပ်သည်။