网站付费模板,电子商务和网络营销的区别,wordpress批量修改链接,企业邮箱使用方法在UE里面#xff0c;我们运行项目可以设置多种网络模式#xff0c;主要是分为三种#xff1a;
运行Standalone 就是单人模式#xff0c;没有网络交互以监听服务器运行#xff0c;在界面里运行的游戏会作为服务器使用以客户端运行#xff0c;UE会单独运行一个线程作为服务…在UE里面我们运行项目可以设置多种网络模式主要是分为三种
运行Standalone 就是单人模式没有网络交互以监听服务器运行在界面里运行的游戏会作为服务器使用以客户端运行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。