Unity联网游戏基础原理与字节数组
如果你要制作一個(gè)能聯(lián)網(wǎng)的游戲,無(wú)論是網(wǎng)絡(luò)游戲還是局域網(wǎng)游戲都離不開(kāi)網(wǎng)絡(luò)通信,網(wǎng)絡(luò)游戲一般是一個(gè)服務(wù)器對(duì)應(yīng)多個(gè)客戶(hù)端,如圖:
?
多個(gè)玩家訪問(wèn)一臺(tái)服務(wù)器,每個(gè)玩家實(shí)際上是一個(gè)客戶(hù)端,在這里我們列舉兩個(gè)小例子。
玩家登錄后需要顯示玩家的角色相關(guān)數(shù)據(jù)比如裝備,道具。
玩家的數(shù)據(jù)是存在服務(wù)器端數(shù)據(jù)庫(kù)的,想要得到這些數(shù)據(jù)必須從服務(wù)器獲得,
這個(gè)過(guò)程分為兩步:
第一步:玩家向服務(wù)器發(fā)送請(qǐng)求數(shù)據(jù)(客戶(hù)端=>服務(wù)器);
第二步:服務(wù)器收到玩家發(fā)送的請(qǐng)求數(shù)據(jù)信息,讀取玩家信息返回?cái)?shù)據(jù)給玩家(服務(wù)器=>客戶(hù)端);
第三步:玩家收到服務(wù)器數(shù)據(jù),顯示到unity里。
網(wǎng)絡(luò)游戲里有十個(gè)玩家,為什么一個(gè)玩家走路,其他玩家都能看到這個(gè)玩家往哪里走呢?這個(gè)過(guò)程,其實(shí)現(xiàn)思路就是分這幾步實(shí)現(xiàn)的:
第一步:玩家1向服務(wù)器發(fā)送自己當(dāng)前的位置數(shù)據(jù)(客戶(hù)端=>服務(wù)器);
第二步:服務(wù)器收到玩家1發(fā)送的自己的當(dāng)前的位置數(shù)據(jù);
第三步:服務(wù)器把玩家1的位置發(fā)送給剩余的9個(gè)玩家(服務(wù)器=>客戶(hù)端);
第四步:剩余的9個(gè)玩家收到了玩家1的當(dāng)前的位置數(shù)據(jù);
第五步:根據(jù)收到的玩家1的位置數(shù)據(jù)顯示到unity里。
我們發(fā)現(xiàn)網(wǎng)絡(luò)游戲數(shù)據(jù)走向一般分為兩種情況。
?
1(客戶(hù)端=>服務(wù)器)數(shù)據(jù)從客戶(hù)端發(fā)送到服務(wù)器,這種情況叫請(qǐng)求。
2(服務(wù)器=>客戶(hù)端)數(shù)據(jù)從服務(wù)器返回到客戶(hù)端,這種情況叫響應(yīng)。
所以,網(wǎng)絡(luò)游戲開(kāi)發(fā)中,玩家玩游戲時(shí),大部分情況都是一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)響應(yīng)來(lái)進(jìn)行的。
玩家登錄發(fā)送登錄請(qǐng)求,數(shù)據(jù)包含玩家賬號(hào)密碼,服務(wù)器處理后下發(fā)登錄響應(yīng) ;
玩家購(gòu)買(mǎi)道具發(fā)送購(gòu)買(mǎi)請(qǐng)求,服務(wù)器處理后返回購(gòu)買(mǎi)后獲得的道具和消耗的錢(qián)幣;
玩家更換陣容發(fā)送更換陣容請(qǐng)求,服務(wù)器處理后返回更換陣容成功失敗;
玩家穿上裝備發(fā)送穿裝備請(qǐng)求,服務(wù)器處理后返回裝備更換;
……
了解了這個(gè)客戶(hù)端與服務(wù)器一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)響應(yīng)交互的過(guò)程后,下一步我們需要關(guān)心的是數(shù)據(jù)如何發(fā)送,發(fā)送什么樣的數(shù)據(jù)。
網(wǎng)絡(luò)通信中的數(shù)據(jù)是以字節(jié)數(shù)組的形式進(jìn)行傳輸,我們需要把代碼中的int,string等類(lèi)型轉(zhuǎn)換成字節(jié)數(shù)組發(fā)送出去,買(mǎi)二手QQ平臺(tái)字節(jié)數(shù)組聽(tīng)起來(lái)很抽象,那么實(shí)際上字節(jié)數(shù)組是什么東西呢,以一個(gè)int為例,來(lái)看看字節(jié)數(shù)組和int之間到底有什么關(guān)系。
新建一個(gè)c#控制臺(tái)程序,寫(xiě)一段測(cè)試代碼。
運(yùn)行起來(lái)后,控制臺(tái)打印。
?
接下來(lái)我們來(lái)找一下規(guī)律。
1對(duì)應(yīng)的字節(jié)數(shù)組是 1,0,0,0
10對(duì)應(yīng)的字節(jié)數(shù)組是10,0,0,0
255對(duì)應(yīng)的字節(jié)數(shù)組是255,0,0,0
258對(duì)應(yīng)的字節(jié)數(shù)組是2,1,0,0
2560對(duì)應(yīng)的字節(jié)數(shù)組是0,10,0,0
256*256對(duì)應(yīng)的字節(jié)數(shù)組是0,0,1,0
256*256*256對(duì)應(yīng)的字節(jié)數(shù)組是0,0,0,1
256*256*256 + 3對(duì)應(yīng)的字節(jié)數(shù)組是3,0,0,1
由此我們可以看到每個(gè)int類(lèi)型的變量轉(zhuǎn)換成byte數(shù)組里面共有4個(gè)元素。
第一個(gè)位置代表2的0次方;
第二個(gè)位置表示2的8次方;
第三個(gè)位置表示2的16次方;
第四個(gè)位置表示2的24次方。
如果我們發(fā)送兩個(gè)int類(lèi)型數(shù)據(jù),1和10,它轉(zhuǎn)換的byte數(shù)組是這樣的1,0,0,0,10,0,0,0
這就是一個(gè)int類(lèi)型轉(zhuǎn)換成byte數(shù)組占4個(gè)字節(jié)的原因啦,同理我們可以研究下其他類(lèi)型的轉(zhuǎn)換,我在這里就不一一細(xì)說(shuō)了,大家自行編寫(xiě)測(cè)試代碼進(jìn)行打印查看即可。
好了,到了這里應(yīng)該已經(jīng)明白了在網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)是什么樣的了,知道了網(wǎng)絡(luò)傳輸數(shù)據(jù)結(jié)構(gòu)將會(huì)為你以后實(shí)現(xiàn)網(wǎng)絡(luò)通信編碼打下一個(gè)基礎(chǔ),以后進(jìn)行網(wǎng)絡(luò)編程時(shí)就不會(huì)慌了。
總結(jié)
以上是生活随笔為你收集整理的Unity联网游戏基础原理与字节数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 揭秘重度MMORPG手游后台性能优化方案
- 下一篇: 用UE4创造开放世界:Kite 实时演示