55. UE5 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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 解析 Linux 不同压缩文件的方法及注意事项

背景 commons-compress 包提供了归档压缩文件的工具类,java.util 里面包含了 Zip 和 gz 文件的解压方法,最终以按扁平方式,遍历到全部文件的文件,包括子目录下的文件。使用 Java 实现的日志采集系统涉及到对压缩文件的解析&#…

【Linux】套接字的理解 基于TCP协议的套接字编程(单/多进程 / 线程池|英汉互译 / C++)

文章目录 1. 前言1.1 网络方面的预备知识👇1.2 了解TCP协议 2. 关于套接字编程2.1 什么是套接字 Socket2.2 socket 的接口函数2.3 Udp套接字编程的步骤2.4 sockaddr 结构 3. 代码实现3.1 makefile3.2 log.hpp3.3 tcp_server.hpp① 框架② service() 通信服务③ init…

记录docker ps查找指定容器的几个命令

1.docker ps | grep registry 查询包含registry的容器 2.docker ps | grep -E "reigistry\s" 开启正则匹配模式,匹配registry后面为空格的容器,若是匹配一整行可以这样写docker ps | grep -E "^([0-9a-f]{12})\sregistry\s.*" 这…

电视机顶盒哪个牌子好?618畅销电视机顶盒排行榜

电视机顶盒是我们使用最多的,不管看直播、动画、追剧、上网课都少不了它的存在。大促期间很多朋友问我电视机顶盒哪个牌子好,小编按照各平台的销量情况整理了618畅销电视机顶盒排行榜,看看哪些品牌的电视机顶盒是最受欢迎的吧。 TOP 1&#x…

为了更全面地分析开发人员容易被骗的原因和提供更加深入的防范措施

为了更全面地分析开发人员容易被骗的原因和提供更加深入的防范措施,我们可以进一步探讨以下几个方面: 深入技术细节 不安全的代码注释和文档: 原因:开发人员在代码注释中可能会无意间透露敏感信息,如API密钥、密码或系…

通过扩展指令增强基于覆盖引导的模糊测试

本文由Bruno Oliveira于2024年4月25日发表于IncludeSec的官方网站上。作为IncludeSec的安全研究人员,在他们日常的安全审计和渗透测试工作中,有时需要为客户开发一些模糊测试工具。在安全评估方法中使用模糊测试技术,可以有效地在复杂的现代化…

git 派生仓库怎么同步主仓库的新分支

一、git 派生仓库怎么同步主仓库的新分支 要使你的Git派生仓库同步主仓库的新分支,请遵循以下步骤: 1、添加上游仓库(如果尚未添加): 如之前所述,确保上游仓库已经被添加到你的本地仓库。如果没有,使用命…

【Basic】BUU LFI COURSE

文章目录 前言一、BUU LFI COURSE二、知识点PHP的危险函数路径遍历攻击 解题感悟 前言 话不多说直接看题 一、BUU LFI COURSE emmm什么提示也没给啊&#xff0c;那只能点开看一看线索了 okok咱们先分析一下这段php代码 <?php /*** Created by PhpStorm.* User: jinzhao*…

哪类漏洞容易被攻破

这个取决于多种因素&#xff0c;包括漏洞的严重程度、攻击者的技术能力和资源、目标系统的安全配置等。然而&#xff0c;一些常见的漏洞类型由于其普遍性和严重性&#xff0c;往往更容易被攻破。 例如&#xff0c;跨站脚本&#xff08;XSS&#xff09;漏洞是一种非常常见的安全…

怎么安装django特定版本

要安装Django的特定版本&#xff0c;你可以使用Python的包管理工具pip。以下是在命令行中安装Django特定版本的步骤&#xff1a; 确保你的计算机上已经安装了Python和pip。如果没有安装&#xff0c;你可以从Python官方网站下载并安装最新版本的Python&#xff0c;pip通常会随Py…

【HCIP学习】RSTP和MSTP

一、RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树&#xff09; 1、背景&#xff1a;RSTP从STP发展而来&#xff0c;具备STP的所有功能&#xff0c;可以兼容stp运行 2、RSTP与STP不同点 &#xff08;1&#xff09;减少端口状态 STP:disabled\blockin…

线程的概念和控制

文章目录 线程概念线程的优点线程的缺点线程异常线程用途理解虚拟地址 线程控制线程的创建线程终止线程等待线程分离封装线程库 线程概念 什么是线程&#xff1f; 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一…

2024中青杯数学建模C题:“X 疾病”在人群中的传播代码论文思路分析

2024中青杯数学建模C题论文和代码已完成&#xff0c;代码为C题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求解&#xff09;、模型的评价…

c++ queue容器

在C标准库中&#xff0c;std::queue 是一个容器适配器&#xff0c;它提供了队列&#xff08;FIFO - First In First Out&#xff09;的数据结构。队列是一种特殊的线性数据结构&#xff0c;只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端…

nssctf(Web刷题)

[SWPUCTF 2021 新生赛]gift_F12 打开题目是一个时间页面&#xff0c;不过看了一会儿发现没有什么用 直接F12打开网页源代码 CtrlF搜索flag 找到了flag NSSCTF{We1c0me_t0_WLLMCTF_Th1s_1s_th3_G1ft} [第五空间 2021]签到题 NSSCTF{welcometo5space} [SWPUCTF 2021 新生赛…

钉钉算是在线办公系统的设计标杆,尽管它依然很难用

不吹不黑&#xff0c;钉钉界面谁的的确简洁&#xff0c;无奈它面向的是场景复杂的办公领域&#xff0c;导致其越来越臃肿难用&#xff0c;反正我是该研究研究&#xff0c;但绝对不会用的。 举报 评论 1

Invoking “make cmake_check_build_system“ failed

前言&#xff1a; 在看过站内其他的方法且试过之后没奏效之后&#xff0c;偶然&#xff0c;无意间&#xff0c;随手整对了&#xff0c;然后后续在老赵的文档也找到了原因&#xff0c;对的上号&#xff0c;那在此我提出一种新的方法&#xff0c;且很简单的小tips。首先先来看看…

如何用电脑批量操作多部手机

如果你有很多手机&#xff0c;然后需要在这些手机上同时执行相同的操作&#xff0c;这个时候如果能有一种办法批量操作&#xff0c;将会大大提高效率&#xff0c;节省很多时间。本文将介绍基于uiautomator2实现的群控手机方案。 uiautomator2 是 一种 Android 自动化测试框架&…

数据挖掘与机器学习——机器学习概述

一、什么是机器学习 机器学习的英文名称叫Machine Learning&#xff0c;简称ML&#xff0c;该领域主要研究的是如何使计算机能够模拟人类的学习行为从而获得新的知识。 机器学习与数据挖掘的联系&#xff1a;简单来说&#xff0c;机器学习就是让计算机从大量 的数据中学习到相关…

yaml文件格式详解 及 k8s实战演示

目录 一 k8s 支持的语言格式 1&#xff0c;YAML 语法格式 2&#xff0c;查看 api 资源版本标签 二 k8s 运行nginx pod实例 yaml文件 具体讲解 1&#xff0c;写一个yaml文件demo 2&#xff0c;deployment 管理nginx 的yaml 文件 3&#xff0c;创建资源对象 4&#…