• 感谢您的阅读。喜欢的、有用的就请大哥大嫂们高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力以及转载收藏动力。欢迎转载!
  • 版权声明:本文原创发表于 【请点击连接前往】 ,未经作者同意必须保留此段声明!如有问题请联系我,侵立删,谢谢!
  • 我的博客:http://www.cnblogs.com/GJM6/  -  传送门:【点击前往

0:讨论群

qq群号:390313628 unity 4.6 版本运行

1:代码

网路协议: http://git.oschina.net/liyonghelpme/protobufferUnity

客户端代码: http://git.oschina.net/liyonghelpme/unityRpg

服务器代码: http://git.oschina.net/liyonghelpme/GameServerCsharp

2:网络游戏属性复制

在RPG网络游戏中,同步方式主要分为两种:

RPC;

属性复制;

本项目实现了一个简单的同步型网络服务器,这种服务器只转发网络报文,不处理游戏逻辑,因此服务器代码比较简单干净。

属性复制,本游戏主要使用到的是HP和位置的属性同步复制,服务器每1s同步一次玩家属性状态;

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不同即可)

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

© 著作权归原帖作者所有    原帖地址:https://my.oschina.net/u/186074/blog/538109

GJM : 基于Actor模式的c#网络游戏服务器的实现和Unity游戏客户端的连接 [转载]的更多相关文章

  1. JAVA NIO non-blocking模式实现高并发服务器(转)

    原文链接:JAVA NIO non-blocking模式实现高并发服务器 Java自1.4以后,加入了新IO特性,NIO. 号称new IO. NIO带来了non-blocking特性. 这篇文章主要 ...

  2. JAVA NIO non-blocking模式实现高并发服务器

    JAVA NIO non-blocking模式实现高并发服务器 分类: JAVA NIO2014-04-14 11:12 1912人阅读 评论(0) 收藏 举报 目录(?)[+] Java自1.4以后 ...

  3. 基于Actor模型的CQRS、ES解决方案分享

    开场白 大家晚上好,我是郑承良,跟大家分享的话题是<基于Actor模型的CQRS/ES解决方案分享>,最近一段时间我一直是这个话题的学习者.追随者,这个话题目前生产环境落地的资料少一些,分 ...

  4. eventloop & actor模式 & Java线程模型演进 & Netty线程模型 总结

    eventloop的基本概念可以参考:http://www.ruanyifeng.com/blog/2013/10/event_loop.html Eventloop指的是独立于主线程的一条线程,专门 ...

  5. Scala的Actor模式 & Akka框架

    今天学Spark的时候,看到Scala的actor模式是一个加分点.所以搜了一下,看了.主要参考下面两篇文章,还没有实验,有些地方领会的不深刻: http://nxlhero.blog.51cto.c ...

  6. Newbe.Claptrap - 一套以 “事件溯源” 和“Actor 模式”作为基本理论的服务端开发框架

    本文是关于 Newbe.Claptrap 项目主体内容的介绍,读者可以通过这篇文章,大体了解项目内容. 轮子源于需求 随着互联网应用的蓬勃发展,相关的技术理论和实现手段也在被不断创造出来.诸如 “云原 ...

  7. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  8. 搭建基于金山快盘的Git服务器

    最近迷上了Git,这货堪称神器,用了它就再也不想用其他VCS了,就像上了高速就不想再走国道一样. 一般人使用Git+Github来搭建进行本地远程交互,不过Github弄个私人仓库是要刀乐思的,如果你 ...

  9. 构建一个简单的基于MVC模式的JavaWeb

    零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是因为那里是我伤心的地方,也或许是因为我在那里失 ...

随机推荐

  1. Android属性动画之ObjectAnimator

    相信对于Android初学者,对于Android中的动画效果一定很感兴趣,今天为大家总结一下刚刚学到的属性动画案例. 首先和一般的Android应用一样,我们先建一个工程,为了方便,我们的布局文件中就 ...

  2. 《BI那点儿事》Microsoft 线性回归算法

    Microsoft 线性回归算法是 Microsoft 决策树算法的一种变体,有助于计算依赖变量和独立变量之间的线性关系,然后使用该关系进行预测.该关系采用的表示形式是最能代表数据序列的线的公式.例如 ...

  3. 【原创】C#玩高频数字彩快3的一点体会

    购彩风险非常高,本人纯属很久以前对数字高频彩的一点研究.目前已经远离数字彩,重点研究足球篮球比赛资料库和赛果预测. 这是一篇在草稿箱保存了1年多的文章,一直没发现,顺便修改修改分享给大家.以后会有更多 ...

  4. Javascript定时器(一)——单线程

    一.JavaScript 引擎是单线程的 可以从下面的代码中看到,第一个用setTimeout中的代码是死循环,由于是单线程,下面的两个定时器就没机会执行了. <script type=&quo ...

  5. [转载]TFS发送邮件提醒功能

    第一次使用TFS 2010,发现有Project Alerts功能,就是项目组工程中若有任何改动时,TFS Server会自动发邮件提醒.Microsoft提供的配置方法(http://msdn.mi ...

  6. 使用 jQuery & CSS3 实现翻转的作品集滑块

    作为 Web 开发人员,我想你一定见过各种各样的图片滑块效果.展示产品或者个人作品的方法有很多,其中之一是使用网格样式的滑块效果.在本教程中,我将分享如何使用 jQuery 和 CSS3 变换实现翻转 ...

  7. Azure SQL Database (1) 用户手册

    <Windows Azure Platform 系列文章目录> 最新更新2016年6月17日 下载地址:Azure SQL Database用户手册

  8. html/css/js小技巧实例

    一些学习中碰到的小技巧 让div自动撑起来: .clearfix:after{ content: "."; clear: both; display: block; visibil ...

  9. Javascript动画效果(二)

    Javascript动画效果(二) 在前面的博客中讲了简单的Javascript动画效果,这篇文章主要介绍我在改变之前代码时发现的一些问题及解决方法. 在前面的多物体宽度变化的例子中,我们给其增加代码 ...

  10. 可显示Android设备选择列表,并进入指定Android设备Console的Shell脚本

    如果PC上连接多部Android设备(包括Android模拟器),在进入Console时还需要使用adb -s deviceid shell.比较麻烦,本文为此编写了一个Shell脚本文件(需要在Li ...