GJM : 基于Actor模式的c#网络游戏服务器的实现和Unity游戏客户端的连接 [转载]
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游戏客户端的连接 [转载]的更多相关文章
- JAVA NIO non-blocking模式实现高并发服务器(转)
原文链接:JAVA NIO non-blocking模式实现高并发服务器 Java自1.4以后,加入了新IO特性,NIO. 号称new IO. NIO带来了non-blocking特性. 这篇文章主要 ...
- JAVA NIO non-blocking模式实现高并发服务器
JAVA NIO non-blocking模式实现高并发服务器 分类: JAVA NIO2014-04-14 11:12 1912人阅读 评论(0) 收藏 举报 目录(?)[+] Java自1.4以后 ...
- 基于Actor模型的CQRS、ES解决方案分享
开场白 大家晚上好,我是郑承良,跟大家分享的话题是<基于Actor模型的CQRS/ES解决方案分享>,最近一段时间我一直是这个话题的学习者.追随者,这个话题目前生产环境落地的资料少一些,分 ...
- eventloop & actor模式 & Java线程模型演进 & Netty线程模型 总结
eventloop的基本概念可以参考:http://www.ruanyifeng.com/blog/2013/10/event_loop.html Eventloop指的是独立于主线程的一条线程,专门 ...
- Scala的Actor模式 & Akka框架
今天学Spark的时候,看到Scala的actor模式是一个加分点.所以搜了一下,看了.主要参考下面两篇文章,还没有实验,有些地方领会的不深刻: http://nxlhero.blog.51cto.c ...
- Newbe.Claptrap - 一套以 “事件溯源” 和“Actor 模式”作为基本理论的服务端开发框架
本文是关于 Newbe.Claptrap 项目主体内容的介绍,读者可以通过这篇文章,大体了解项目内容. 轮子源于需求 随着互联网应用的蓬勃发展,相关的技术理论和实现手段也在被不断创造出来.诸如 “云原 ...
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- 搭建基于金山快盘的Git服务器
最近迷上了Git,这货堪称神器,用了它就再也不想用其他VCS了,就像上了高速就不想再走国道一样. 一般人使用Git+Github来搭建进行本地远程交互,不过Github弄个私人仓库是要刀乐思的,如果你 ...
- 构建一个简单的基于MVC模式的JavaWeb
零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是因为那里是我伤心的地方,也或许是因为我在那里失 ...
随机推荐
- linux epoll模型使用注意点
1.默认使用的水平触发方式会多次触发回调函数,但是事实上这时并不需要回调,会浪费系统性能,就是在注册
- OpenCascade Matrix
OpenCascade Matrix eryar@163.com 摘要Abstract:本文对矩阵作简要介绍,并结合代码说明OpenCascade矩阵计算类的使用方法. 关键字Key Words:Op ...
- Aspect Oriented Programming
AOP(Aspect Oriented Programming),面向切面编程(也叫面向方面)是目前软件开发中的一个热点.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度 ...
- 【总结】探索Newlife组件:服务代理利器XAgent的前世今生
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html Newlife XCode组件相关文章目录:http://www.cn ...
- python--基础学习(二)判断 、循环、定义函数、继承、调用
1.判断 if.elif 代码示范 # coding=utf-8 score = 90 if (score>=90): print("完美") print("优秀& ...
- easyui-datagrid行数据field原样输出html标签
easyui-datagrid 绑定的行 field 原样输出html标签.处理效果如图: Html页面代码如下: ... <tr> <th field="id" ...
- AngularJS的学习--$on、$emit和$broadcast的使用
AngularJS中的作用域有一个非常有层次和嵌套分明的结构.其中它们都有一个主要的$rootScope(也就说对应的Angular应用或者ng-app),然后其他所有的作用域部分都是继承自这个$ro ...
- C#预处理器指令 ,你造吗??? (●'◡'●)
什么是c#预处理指令?? 用于在 C# 源代码中嵌入的编译器命令. C#预处理器指令有哪些?? ↓↓↓这些就是预处理器指令啦 下面我们一一道来(●'◡'●) 1.#if ,#elif,#else,en ...
- Nodejs学习笔记(三)——一张图看懂Nodejs建站
前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...
- Web 开发人员和设计师必读文章推荐【系列二十九】
<Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...