UE4 C/S模式

推荐大家一个写的很不错的博客(深入浅出UE4网络):https://www.cnblogs.com/Leonhard-/p/6511821.html

举例讲一下C/S模式:

客户端负责表现、服务器端负责数据。

  • 以掉血为例:

一、玩家A砍了B一刀

二、服务器计算伤害,修改B的血量

三、把B的血量发给B,A砍B的动作发给所有能看到的玩家

四、客户端播放掉血量(如果允许可见),播放动作

  • 以抽卡为例:

一、客户端发起抽卡请求

二、服务器端根据此玩家的消费、等级等随机产生一张卡牌

三、服务器把结果发给客户端

四、客户端播放抽卡动画,然后出结果。

  • 如何防外挂:

一、关键的计算,放在服务器

扫描二维码关注公众号,回复: 9858845 查看本文章

二、服务器做足验证,超出正常人为水平就理解为外挂

三、有些只能在客户端计算,可以进行代码混淆、资源加密

  • 语言选择

一、技术线路的选择,和需求、偏好、能力都有关

二、客户端受限于引擎,Cocos(C++,Lua,JS),Unity(C#,Lua),UE4(C++,蓝图)

三、服务器可选方案更多:C++、Python、Java、PHP

UE4启动参数或者 bat脚本启动

  • 监听服务器

  UE4Editor.exe ProjectName MapName?Listen -game -log

  • 专用服务器

  UE4Editor.exe ProjectName MapName -server -game -log

  • 客户端

  UE4Editor.exe ProjectName ServerIP -game -log

连接过程,主要步骤如下:

  •   客户端发送连接请求。
  •   如果服务器接受连接,则发送当前地图。
  •   服务器等待客户端加载此地图。
  •   加载之后,服务器将在本地调用 AGameMode::PreLogin。这样可以使 GameMode 有机会拒绝连接
  •   如果接受连接,服务器将调用 AGameMode::Login, 该函数的作用是创建一个 PlayerController,可用于在今后复制到新连接的客户端。成功接收后,这个 PlayerController 将替代客户端的临时 PlayerController (之前被用作连接过程中的占位符)。
  •   此时将调用 APlayerController::BeginPlay。应当注意的是,在此 actor 上调用 RPC 函数尚存在安全风险。您应当等待 AGameMode::PostLogin 被调用完成。
  •   如果一切顺利,AGameMode::PostLogin 将被调用。这时,可以放心的让服务器在此 PlayerController 上开始调用 RPC 函数。
发布了40 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zhangmei126/article/details/100696368