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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面向对象-----继承

前面向大家介绍了面向对象中的封装性,今天再来向大家介绍面向对象的继承和多态的两大特性。 1.继承 1.1 为什么需要继承? 在java语言中,我们用类来描述世间万物,虽然万物非常复杂,但总有一些共同点,如果…

深入Django项目实战与最佳实践

title: 深入Django项目实战与最佳实践 date: 2024/5/19 21:41:38 updated: 2024/5/19 21:41:38 categories: 后端开发 tags: Django 基础项目实战最佳实践数据库配置静态文件部署高级特性 第一章:Django项目架构与设计原则 Django框架概述 Django是一个高级的P…

linux的用户管理

新建用户:1.useradd 2.passwd 完成的操作: (1)/etc/passwd添加一行 (2)/etc/shadow添加一行 (3)/etc/group添加一行 (4)创建用户家目录 (5)创建用户邮件文件 例:创建用户jerry,要求: uid:777&am…

文心一言指令解析

1、介绍 文心一言是一款灵感启发类的产品,它以简洁而深刻的文字表达来激发读者的思考和感悟。该产品通过每天提供一句精选的短语,让用户在繁忙的生活中停下脚步,思考人生和内心的真实需求。 每一句文心一言都经过精心挑选,它们通…

苹果MacOS系统使用微软远程桌面连接Windows电脑桌面详细步骤

文章目录 前言1. 测试本地局域网内远程控制1.1 Windows打开远程桌面1.2 局域网远程控制windows 2. 测试Mac公网远程控制windows2.1 在windows电脑上安装cpolar2.2 Mac公网远程windows 3. 配置公网固定TCP地址 前言 日常工作生活中,有时候会涉及到不同设备不同操作系…

【SpringBoot】整合百度文字识别

流程图 一、前期准备 1.1 打开百度智能云官网找到管理中心创建应用 全选文字识别 1.2 保存好AppId、API Key和Secret Key 1.3 找到通用场景文字识别,立即使用 1.4 根据自己需要,选择要开通的项目 二、代码编写 以通用文字识别(高精度版&am…

2024-5-4-从0到1手写配置中心Config之基于h2的config-server

添加依赖 新建的web工程中添加h2的依赖 添加h2的配置 设置数据源和密码设置初始化sql语句打开h2的控制台 初始化语句创建一个config表,保存服务配置信息。 完成CRUD接口 controller类 mapper接口 测试 在web控制台可以看到sql已经初始化完成,crud接口…

如何*永久*禁用edge打开PDF文件?

要永久禁用Microsoft Edge打开PDF文件,您可以按照以下步骤进行操作: 打开文件资源管理器并找到任意一个PDF文件。 右键单击该文件并选择“属性”。 在“属性”对话框中,单击“更改”按钮旁边的“打开方式”。 在“打开方式”对话框中&…

Leetcode - 398周赛

目录 一,3151. 特殊数组 I 二,3152. 特殊数组 II 三,3153. 所有数对中数位不同之和 四,3154. 到达第 K 级台阶的方案数 一,3151. 特殊数组 I 本题就是判断一个数组是否是奇偶相间的,如果是,…

【Floodfill算法】dfs或者bfs解决floodfill算法

1.图像渲染 图像渲染 dfs解决代码&#xff1a; class Solution { public:int dx[4] {0, 0, -1, 1};int dy[4] {-1, 1, 0, 0};int m, n;int prev;vector<vector<int>> ret;vector<vector<int>> floodFill(vector<vector<int>>& ima…

Java并发: 锁和同步

在Java并发: 面临的挑战那一篇中我们提到锁和同步是实现并发安全(可见性/原子性)的方法之一。这一章我们来讲讲Java中的锁和同步的各种工具&#xff0c;包括: LockSupportAbstractQueuedSynchronizerJava内置的锁实现 1. LockSupport LockSupport是基于Unsafe的park/unpark实…

linux 查看java线程与linux线程关系

linux 查看占用cpu高的 java 线程 linux 排查cpu占用100%故障 ##java程序 import java.util.Scanner; public class JavaThreadIDName {public static void main(String[] args) {Thread t Thread.currentThread();t.setName("laoyoutiao");System.out.println(&…

golang创建式设计模式---工厂模式

创建式设计模式—工厂模式 目录导航 创建式设计模式---工厂模式1)什么是工厂模式2)使用场景3)实现方式4)实践案例5)优缺点分析 1)什么是工厂模式 工厂模式(Factory Method Pattern)是一种设计模式&#xff0c;旨在创建对象时&#xff0c;将对象的创建与使用进行分离。通过定义…

以太坊(2)——共识机制与挖矿算法

共识机制 ETH采用的是基于GHOST协议的共识机制 "GHOST"&#xff08;Greedy Heaviest-Observed Sub-Tree&#xff09;共识机制&#xff0c;它是以太坊使用的一种改进的区块链共识算法。GHOST共识机制旨在提高链的安全性和效率&#xff0c;通过考虑非主链区块的贡献&…

kubectl详解

文章目录 kubectl详解一、陈述式管理1、陈述式资源管理方法2、k8s相关信息查看2.1 查看版本信息2.1.1 查看资源对象简写2.1.2 查看集群信息2.1.3 配置kubectl自动补全2.1.4 查看日志 2.2 基本信息查看2.2.1 查看集群状态2.2.2 查看命名空间 2.3 命名空间操作2.3.1 查看default命…

CDN用户平台安装说明

CDN用户平台安装说明 登录管理员系统 在”系统设置” – “高级设置” – “用户节点”中点击”添加节点” 如果所示&#xff1a; 节点名称 - 可以任意填写 进程监听端口 - 启动用户节点后&#xff0c;进程所监听的端口&#xff0c;通常是HTTP 80或者HTTPS 443&#xff0c;…

html 段落与排版标记 Web前端开发技术、详细文章(例如)

段落与排版标记 网页的外观是否美观&#xff0c;很大程度上取决于其排版。在页面中出现大段的文字&#xff0c;通常采用分段进行规划&#xff0c;对换行也有极其严格的划分。本节从段落的细节设置入手&#xff0c;利用段落与排版标记自如地处理大段的文字。 段落p标记 在HTM…

Spring Cloud Gateway 网关

一. 什么是网关&#xff08;Gateway&#xff09; 网关就是一个网络连接到另一个网络的关口。 在同一个项目或某一层级中&#xff0c;存在相似或重复的东西&#xff0c;我们就可以将这些相似重复的内容统一提取出来&#xff0c;向前或向后抽象成单独的一层。这个抽象的过程就是…

Linux磁盘高级操作

RAID RAID存储系统是一种数据存储虚拟化技术&#xff0c;它将多个物理磁盘驱动器组合成一个或多个逻辑单元&#xff0c;以提供数据冗余和/或提高性能。 1. RAID 0 无奇偶校验与冗余&#xff08;磁盘容错&#xff09;的条带存储&#xff08;带区卷/条带卷&#xff09; 由两块…

Linux-文件或目录权限

在使用 ll 时&#xff0c;可以查看文件夹内容的详细信息&#xff0c;信息的第1位表示类型&#xff0c;具体信息如下&#xff1a; 类型说明-普通文件d文件夹b块设备文件c字符设备文件p管道文件s套接口文件 第2-10位表示权限&#xff0c; 举例&#xff1a;rwxr-xr-x 类型说明r…