zoukankan      html  css  js  c++  java
  • GJM : 基于Actor模式的c#网络游戏服务器的实现和Unity游戏客户端的连接 [转载]

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

  • 相关阅读:
    aodquery,clientdataset数据控件之间的速度区别
    centos防火墙相关
    centos安装jdk,精简
    delphi 操作excel复制区域功能呢
    centos安装redis,最靠谱的教程
    图像识别,借助百度云,上传图片实现逻辑
    LinkedHashmap和HashMap对比以及说明
    Windows环境下Zookeeper安装和使用
    你不知道的JavaScript--Item1 严格模式
    jQuery学习之旅 Item2 选择器【二】
  • 原文地址:https://www.cnblogs.com/TDou/p/6108746.html
Copyright © 2011-2022 走看看