🔫CoopGame05-游戏网络
type
status
date
slug
summary
tags
category
icon
password
跟随B站up主“技术宅阿棍儿”的教程制作的笔记。教程链接
变成网络游戏
- 创建继承
CoopGameGameModeBase
C++类的蓝图类BP_GameMode
、
- 在世界场景设置指定游戏模式重载为
BP_GameMode
,指定默认Pawn为自己的角色蓝图类BP_SCharacter
。
- 修改游戏的启动模式,网络模式:
以聆听服务器运行
,玩家数量:2
从服务器发枪
- 让服务器角色才能生成武器,判断是否为权威角色,
运行结果为Server端角色有武器,Chient端角色无武器
。
- 使Server端角色的武器复制给Client端角色,
运行结果为Server端和Chient端的角色都有武器
。 - 注意
BP_SWeapon
蓝图类中的复制属性
是否默认勾选上。
- 使两端都能开枪。
运行结果为Server端和Chient端的角色都可以开枪,但是两边窗口看不到对方开枪
。
客户端不能开枪的原因:鼠标左键按下调用StartFire()函数,松开调用StopFire()函数,但此时两个函数都必须满足CurrentWeapon这个变量存在,而这个变量是在上面限制武器只在Server端生成的地方赋值的,所以CurrentWeapon为空,客户端无法调用武器的Fire()函数。1.在SCheracter.h的CurrentWeapon变量添加宏参数Replicated,用于复制。
2.添加网络同步函数
SCharacter.h
SCharacter.cpp
从服务器开枪
1.让Clinet端的角色不仅在本地开枪,也在Server端上开枪。
运行结果:Chient端的角色开枪时所有特效在两端窗口都能看到
。原理:客户端窗口里的客户端角色开枪请求服务端,让服务端里的客户端角色开火,然后服务端里的客户端角色开火后复制给客户端里的客户端角色,最后服务端里的客户端角色和客户端里的客户端角色都能开火。`SWeapon.h
SWeapon.cpp
#让客户端开枪(同步枪口特效,弹道特效,击中特效)
现状:服务端窗口里的服务端角色和客户端角色都能开枪,客户端窗口上只有客户端角色能开枪,不能看到服务端角色开枪,我们要让客户端窗口里的服务端角色拿到复制过来的特效,模拟开枪。
1.同步开枪特效的属性,让服务器下发,因为之前整理的特效代码和教程不一致,这里以我自己整理的为准。
运行结果:Server端的角色开枪时击中特效在两端端窗口都能看到
。修改CooGame.Build.cs
SWeapon.h
SWeapon.cpp
#死亡同步
1.给生命值组件添加同步,给生命值的宏添加复制参数,设置生命值组件是否复制为true,设置只能由服务器角色绑定伤害事件,同时角色类中的bDried也得被复制到客户端上。
运行结果:两端击杀的死亡动画已同步
。SHealthComponent.h
SHealthComponent.cpp
SCharacter.h
SCharacter.cpp
#挑战:爆炸油桶的网络同步
1.修改必要的同步属性和视觉效果。
运行结果:两端油桶爆炸和移动已同步
。SExplosiveBarrel.h
SExplosiveBarrel.cpp
Prev
CoopGame04-伤与挂
Next
CoopGame06-AI基础
Loading...