基於Actor模式的c#網絡遊戲服務器的實現和Unity遊戲客戶端的鏈接

####0:討論羣 qq羣號:390313628 unity 4.6 版本運行git

####1:代碼 網路協議: http://git.oschina.net/liyonghelpme/protobufferUnity服務器

客戶端代碼: http://git.oschina.net/liyonghelpme/unityRpg網絡

服務器代碼: http://git.oschina.net/liyonghelpme/GameServerCsharp測試

####2:網絡遊戲屬性複製 在RPG網絡遊戲中,同步方式主要分爲兩種:.net

RPC;代理

屬性複製;對象

本項目實現了一個簡單的同步型網絡服務器,這種服務器只轉髮網絡報文,不處理遊戲邏輯,所以服務器代碼比較簡單幹淨。遊戲

屬性複製,本遊戲主要使用到的是HP和位置的屬性同步複製,服務器每1s同步一次玩家眷性狀態;get

RPC對於玩家的技能釋放,buff添加,傷害添加採用RPC的方式同步。全部的技能都有惟一標示的技能ID,buff也有惟一的標示,這樣同步的時候只須要廣播ID便可。同步

網絡遊戲中對遊戲對象有多重角色定義,本項目中客戶端實體分爲兩種角色:

1:本地角色,即屬於當前客戶端控制的角色,例如玩家自身

2:遠程代理角色,例如本地客戶端同步的遠程其它玩家

全部的遠程代理角色有一個PlayerSync組件,用於處理遠程網絡命令,而本地角色沒有。

遠程代理角色不能修改角色的屬性,只能經過網絡同步的方式,主要包括傷害處理, buff添加,hp變化。

####3:相關代碼實現

服務端遊戲邏輯主要實如今 WorldActor 和 PlayerActor 中,WorldActor用於管理全部客戶端的角色的進入和離開。

PlayerActor用於處理每一個客戶端的相關同步。

客戶端主要邏輯實現:

客戶端採用狀態機和命令處理器的方式,本地和遠程端處理命令機制相同,只是在對屬性修改上須要區分對象是本地角色仍是 遠程代理, 若是是遠程代理 則跳過處理。

代碼主要是:PlayerSync.cs , Map3.cs, NetDataInterface.cs, LogicCommand.cs

客戶端的網絡代碼主要是: RemoteClient.cs

####4:測試方法

啓動遊戲服務器,服務器將監聽本地的10001 端口

啓動A客戶端,設置LoginAndCharUIScene 場景中kbengine實體的的TestPort 參數 爲20000(客戶端有個本身的本地服務器)

啓動B客戶端,設置LoginAndCharUIScene 場景中kbengine實體的的TestPort 參數 爲20001(保證和A不一樣便可)

進入遊戲,在主城 點擊遠古戰場,則進入了網絡場景,在遠古戰場場景能夠看到兩個玩家,玩家能夠互相交互。

相關文章
相關標籤/搜索