基于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不一样便可)

进入游戏,在主城 点击远古战场,则进入了网络场景,在远古战场场景能够看到两个玩家,玩家能够互相交互。

相关文章
相关标签/搜索