【UE4】联网游戏开发的正确姿势
联网游戏开发的正确姿势
本文链接: https://blog.csdn.net/qq_30832915/article/details/123218832
1. 前言
刚接触UE4的同步机制感觉功能挺强大的,变量同步、RPC都无缝支持,但是却不知道怎么正确使用这些机制来开发游戏,什么时候客户端调用服务器,什么时候从服务器调用客户端,哪些代码在客户端写,哪些代码在服务器写。
2. 正文
首先应该明确游戏应该是数据安全的,原则上客户端不能直接修改任何数据,而客户端主要向 服务器上传玩家的输入,然后服务器处理逻辑,逻辑处理结束后让客户端播放效果。
例如跳跃功能的开发,客户端应该监听跳跃键"Space", 然后通过RPC调用服务器跳跃函数,服务器让Actor跳跃,然后RPC所有客户端让这个actor播放跳跃的动画 (跳跃导致actor会通过移动组件同步到客户端)。
代码如下:
UCLASS()
class Game_API ABasePlayer : public ACharacter
{GENERATED_BODY()// ... 省略代码 ...
public:// 按键被按下绑定此函数void Input_Jump(){Server_Jump();}UFUNCTION(Server, Reliable)void Server_Jump();void Server_Jump_Implementation(){if(CanJump()){Jump();Client_JumpEffect();}}UFUNCTION(NetMulticast, Reliable)void Client_JumpEffect();void Client_JumpEffect_Implementation(){PlayAnimMontage(JumpAnimMontage, 1.0);}
}
最理想情况下应该像上述代码那样做,但是实际做起来可能会发现网络不好的情况下,延迟可能会比较高,所以我们可能在客户端可以在 跳跃键按下时立即播放跳跃的效果,并同时rpc后台,但是需要注意的是客户端应该缓存足够的状态以判断客户端是否应该跳跃。
另外,还需要注意一下rpc的频率,比如手持机枪的射击操作,如果每次射击都调用rpc的话,0.1射速的武器 一秒可能就要调用10次rpc函数,我认为这个频率是不可以接受的,我们可以按下射击键的时候rpc服务端通知服务端开始射击,松开射击键时rpc服务端通知停止射击,这样能有效减少rpc次数。
射击的代码:
UCLASS()
class Game_API ABasePlayer : public ACharacter
{GENERATED_BODY()// ... 省略代码 ...
public:// 按键被按下绑定此函数bool IsFireKeyPressed {false}float FireTime = 0.0f;void Input_StartFire(){Server_Jump();}void Input_EndFire(){Server_Jump();}UFUNCTION(Server, Reliable)void Server_StartFire();void Server_StartFire_Implementation(){IsFireKeyPressed = true;}UFUNCTION(Server, Reliable)void Server_EndFire();void Server_EndFire_Implementation(){IsFireKeyPressed = false;}void Tick(float DeltaTime){// 如果是在服务器if (HasAuthority()){FireTime -= DeltaTime;if (FireTime < 0) FireTime = 0;if (IsFireKeyPressed ){if (FireTime == 0.0f){// 服务器射击逻辑// RPC客户端播放射击的效果}}}}}
3. 总结
- 客户端不能影响任何服务器数据
- 客户端只做监听玩家输入,适当卡顿的地方可以做行为预演
- 避免过高频率的RPC
【UE4】联网游戏开发的正确姿势相关推荐
- 快速入门Web前端开发的正确姿势
入门标准很简单,就一条:达到能参与 Web 前端实际项目的开发水平.请注意,是实际项目,这就需要了解如今的实际项目开发都用了哪些技术栈.HTML/CSS/JavaScript 这三大基础技术栈肯定是需 ...
- Flash 联网游戏开发基础课程
最新提示: A 课程 4月3号开始.课程刚刚开始... 课程主要教授AS3面向对象编程知识以及Flex开发环境.[适合的人群]适合那些还没有足够AS3编程经验以及不熟悉面向对象方式编程的开发者,比如: ...
- U3D游戏开发工程师正确入行姿势指南
2021年,游戏圈上演了一场精彩绝伦的抢人大战.在上海游戏圈,年薪百万的人越来越多了. 据多名HR估算,在上海,过去一年TA.引擎.美术等稀缺岗位拟的薪资涨幅大概在20%-30%左右.某位圈内知名资深 ...
- UE4独立游戏开发简介
原文链接 大家好,我叫人宅,是一枚野生的程序猿,一直寻求和研究用最正确最高效的姿势来设计游戏和开发游戏,让游戏开发变得简单. 好吧,还是进入正题,我们详细聊一下关于游戏开发,这才是我们应该聊聊的话题. ...
- 联网游戏开发实例分享之《游侠姐妹》(附源码)
项目情况 游戏名:<游侠姐妹> 工具说明:本游戏前端使用白鹭Egret开发,后端联网部分通过接入Matchvs游戏云的SDK实现. 游戏简介: <游侠姐妹>是一款支持联网对战的 ...
- 学习多媒体开发的正确姿势?陈功:看书 啃代码 搞插件
陈功说,要想学好多媒体开发,首先需要兴趣,接下来还需要好的方法.LiveVideoStack邮件采访了声网Agora首席WebRTC架构师,畅聊了自己的成长经历,WebRTC的演进趋势等.陈功表示,W ...
- 前端开发的正确姿势——各种文件的目录结构规划及引用
首先,要说的是我们领导总挂在嘴边的一句话:一入前端深似海.之前没有接触过前端,一直不懂这句话的含义,直到最近写作业改需求的时候才发现,因为web页面是直接面向客户的,所以需求的修改都和前端有关,有时候 ...
- 最详细,快速入门Web前端开发的正确姿势
入门标准 入门标准很简单,就一条:达到能参与 Web 前端实际项目的开发水平.请注意,是实际项目,这就需要了解如今的实际项目开发都用了哪些技术栈.HTML/CSS/JavaScript 这三大基础技术 ...
- es6标准入门第3版pdf_最详细,快速入门Web前端开发的正确姿势
入门标准 入门标准很简单,就一条:达到能参与 Web 前端实际项目的开发水平.请注意,是实际项目,这就需要了解如今的实际项目开发都用了哪些技术栈.HTML/CSS/JavaScript 这三大基础技术 ...
最新文章
- 第一讲SQL命令的DDL和DML操作讲解
- C语言ASM汇编内嵌语法zz
- CString类(转)
- html5新加入的内容,10个html5增加的重要新特性和内容
- hdfs snapshot 快照的使用场景应用与操作命令的介绍
- php1008打印机驱动器,hp laserjet p1008打印机驱动
- DNN硬件加速器设计1 -- 序(MIT)
- Linux 普通用户su root 权限的开启和禁止
- 计算机硕士工资一览表 08年各大IT公司薪水行
- cnc计算机控制,CNC控制器
- uefi 懒人版黑苹果_macOS Sierra 10.12.6(16G29) 变色龙引导懒人版CDR黑苹果镜像
- 【图论-二分图】中山纪念中学暑期游Day15——【NOIP2013模拟联考3】沙耶的玩偶(doll)
- leetcode675. Cut Off Trees for Golf Event(Hard)
- 【历史上的今天】3 月 11 日:谷歌推出 Google Voice;互联网先驱诞生日;Foursquare 上线
- 《众妙之门——自由网站设计师成功之道》一1.1 迈向成功的几个必要习惯
- Unity中单点和多点触控
- DOS环境下出现“ ‘javac‘不是内部或外部命令,也不是可运行的程序或皮处理文件 “的报错的解决方法
- 当健身用户进入直播间:一场全新内容生态的破壁与重建
- 宿舍管理系统-设计数据库
- ‘svchost.exe-应用程序错误 0xc0000409’客户端无法登陆终端服务器之解决方法
热门文章
- 计算机模拟圣彼得堡游戏
- vue3 实现监听store里state状态变化
- and desgin Vue页面,使用watch监视, <a-input>内的值, 自动计算出填入框的值,用vue中watch监听input组件的变化
- Win10设置添加来宾账户的方法
- Rinne Loves Study
- 重庆崽儿,啷个能不回重庆撒!
- 千里马android framework开发解决Accessing hidden method限制,让应用访问隐藏方法(需要可以修改系统源码方案)
- python怎么重启内核_python怎么重启服务器
- 使用Android Studio实现简单的计算器(已亲自实验通过)
- pytho sockt编程