55. UE5 GAS RPG 处理当前功能在多人模式中的问题

在UE里面,我们运行项目可以设置多种网络模式,主要是分为三种:

  1. 运行Standalone 就是单人模式,没有网络交互
  2. 以监听服务器运行,在界面里运行的游戏会作为服务器使用
  3. 以客户端运行,UE会单独运行一个线程作为服务器端,所有的游戏线程都为客户端
    在这里插入图片描述
    接下来,我们要调试之前实现功能在多人玩法下会不会出现问题,我们以上面的方式设置运行,看看会有哪些问题出现。

敌人角色初始化问题

在角色初始时,报了一个错误
在这里插入图片描述
在获取角色配置时,无法获取到配置文件,这个配置文件是设置到GameMode上面的。
在这里插入图片描述
GameMode内容只运行在服务器端,在客户端是无法获取到其设置的内容,所以会引发对应的报错,所以,我们需要在初始化时,判断是否拥有控制权。
初始化角色属性属于应用GE到角色ASC,应用完成的属性会自动复制到客户端,所以我们初始化敌人时,需要判断一下是否是服务器。
我们可以通过HasAuthority()来判断
在这里插入图片描述
在初始化角色属性时,也需要
在这里插入图片描述
然后编译查看问题,这个问题看来就解决了。

解决客户端攻击在服务器端显示

我们在客户度攻击敌人时,发现伤害数字并没有在客户端显示,而只是在服务器端上面显示数字,这个问题是在AttributeSet(服务器)调用时,获取到的控制器是服务器的,所以在服务器上播放文字。
在这里插入图片描述
我们查看以下代码,我们是通过的UGameplayStatics::GetPlayerController获取的控制器
在这里插入图片描述
看函数发现第一个值是获取对象的上下文,我们在服务器端传入的角色对象也是属于服务器端的。
在这里插入图片描述
所以,这里我们无法直接使用静态函数去获取,我们可以直接从SourceCharacter上面获取
在这里插入图片描述
这样就实现了,在客户端上显示伤害数字
在这里插入图片描述

解决在客户端运行时报错行为

接下来,我们切换到单独客户端运行
在这里插入图片描述
在运行时会出现错误,经过我检查因为创建的自定义FRPGGameplayEffectContext复制的父类的函数,没有做到统一,所以读取内容时,我们新增的内容无法复制,现在修改后,就没有问题了
在这里插入图片描述
然后就是第二个问题,我们在客户端模式下,如果攻击敌人,会发现没有释放出火球,但是自身会减血
在这里插入图片描述
推理一下,就是火球术直接攻击了自己,造成了伤害,而没有发射出去。
接下来编译运行,我们发现火球术能顺利发射出去了,但是它也无法和目标产生交互
在这里插入图片描述
至于为什么无法和敌人产生碰撞交互,我们暂停,按F8,发现火球术是在敌人头上飞过去的
在这里插入图片描述
造成这个的原因是因为,火球术是在法杖的头部发射出去的,并且我们在生成火球时,将火球设置为了水平飞行,所以,火球现在直接在敌人头上飞过。
所以我们把Pitch取消设置为0
在这里插入图片描述
现在就没有问题了
在这里插入图片描述

处理技能和自身产生碰撞的问题

首先我们看以下Laya里面是如何实现的,它是在蓝图中,忽略了施放者的碰撞体。
在这里插入图片描述
经过我测试这种方法只能忽略碰撞,如果是OnComponentBeginOverlap这种还是会触发,经过查询数据需要在触发时进行判断,所以我们需要在创建时,设置好它的触发者
在创建发射物时,设置好释放者,我们设置的是ASC的AvatarActor
在这里插入图片描述
接下来在发射物类的Overlay回调函数中,设置判断和触发碰撞的物体是否和释放者一致,这里,我们也不需要用从GE的Context获取,因为之前这是判断发现触发碰撞是,GE里面数据是空的,证明在碰撞时,数据还未设置,所以,我们在初始化时设置的必能够获取到。
在这里插入图片描述

获取属性报错信息

在获取属性时,没有设置的SetByCaller会报错
在这里插入图片描述
在ExecCalc_Damage里设置的方法获取
在这里插入图片描述
我们查看原方法,发现如果第二个值为true才会打印debug,但是不知为何我们没有设置也会报出来,所以,我们直接增加全配置项。
在这里插入图片描述
增加两个参数设置,没有了报错
在这里插入图片描述
查看了一下没有其它问题,就告一段落。
后面我们将制作敌人的AI。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值