推荐大家一个写的很不错的博客(深入浅出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 函数。