首页 > 其他分享 >针对ShotGun的ServerRewind

针对ShotGun的ServerRewind

时间:2024-08-20 19:54:29浏览次数:13  
标签:针对 ServerRewind ShotGun ConfirmHit const HitTime TArray HitCharacters

区别

虽然也是HitScane,但其可以对多个角色或者多个部位造成伤害

更改

首先是之前在FFramePackage结构体中,需要增添一个成员变量,用来表示该结构体中的BoxCollision属于哪个敌人。
而之前使用的ConfirmHit返回的校验击中头部和身体的结构体,需要为ShotGun创建类似的,其内有两个TMap类型的成员变量

TMap<Character*, int> HeadHits;
TMap<Character*, int> BodyHits;

针对ShotGun的服务器上检测

由于ShotGun是可能攻击的多个角色,具有多个HitLocation的,所以对于ShotGun的ServerRewind主函数,接受的参数也发生了变化

FShotGunServerSideRewindResult ShotGunServerSideRewind(const TArray<AXCharacter*>& HitCharacters, const FVector_NetQuantize& TraceStart, const TArray<FVector_NetQuantize>& HitLocations, float HitTime)

FShotGunServerSideRewindResult这个结构体就是上面提到的ConfirmHit需要返回的结果。
而对于ShotGunServerSideRewind这个函数,处理是和普通的一样的,对于HitCharacters,根据HitTime寻找关键帧的位置,然后进行存储,最后再调用ConfirmHit函数对于该关键帧进行校验
只不过由于是多个Character,所以需要存储在一个数组中,数组每个索引位置接受一个HitCharacters在HitTime上的FramePackage

TArray<FFramePackage> FramesToCheck;
for (AXCharacter* HitCharacter : HitCharacters)
{
	//获取ShotGun的击中检测Box信息
	FramesToCheck.Add(GetFrameToCheck(HitCharacter, HitTime));
}

ShotGun ConfirmHit

还是因为多敌人的问题,所以参数发生了相应的变化

FShotGunServerSideRewindResult ShotGunConfirmHit(const TArray<FFramePackage>& FramePackages, const FVector_NetQuantize& TraceStart, const TArray<FVector_NetQuantize>& HitLocations)

FramePackages就是在ShotGunServerSideRewind函数中获得的存储了每个角色在HitTime下的FramePackage
但是整体逻辑和ConfirmHit一致

  1. 首先定义一个FShotGunServerSideRewindResult结构体变量ShotGunResult,之后针对每个FramePackage中的检测结果都可以存入到该结构体变量中
  2. 针对每个FramePackage里面的HitCharacter存储当前帧,用于检测完成之后返回,然后回退到当前关键帧的FramePackage,关闭碰撞体之类的
  3. 开启HeadBox碰撞,开始检测,遍历HitLocations数组,根据每个HitLocation检测是否有Hit,如果有,那么将ShotGunResult里面HeadHits对应的Character命中次数+1
  4. 开启身体的碰撞,开始检测,也是遍历HitLocations数组,如果有Hit,那么将ShotGunResult里面BodyHits对应的Character命中次数+1
  5. 进行Box的返回,开启关闭碰撞等等,最后返回ShotGunResult

ShotGun 的 执行伤害逻辑

该函数就是和普通的一样放在Weapon类中执行的

void ServerShotGunScoreRequest_Implementation(const TArray<AXCharacter*>& HitCharacters, const FVector_NetQuantize& TraceStart, const TArray<FVector_NetQuantize>& HitLocations, float HitTime)
  1. 可以通过ShotGunServerSideRewind获得所有攻击的命中结果FShotGunServerSideRewindResult结构体变量Confirm
  2. 然后遍历HitCharacters,通过Confirm中的两个Map计算应当造成的伤害值,注意到这里是没有传入武器的,因为目前是通过该组件类中获取到的所属成员,然后通过所属成员获取其持有的武器来获得基础伤害
  3. 最后利用ApplaDamage对HitCharater造成伤害

标签:针对,ServerRewind,ShotGun,ConfirmHit,const,HitTime,TArray,HitCharacters
From: https://www.cnblogs.com/XTG111/p/18369921

相关文章

  • 【PID控制】针对扭转系列弹性驱动器的力矩控制策略基准测试研究(Matlab代码实现)
      ......
  • Ropdump:针对二进制可执行文件的安全检测工具
    关于RopdumpRopdump是一款针对二进制可执行文件的安全检测工具,该工具基于纯Python开发,是一个命令行工具,旨在帮助广大研究人员检测和分析二进制可执行文件中潜在的ROP小工具、缓冲区溢出漏洞和内存泄漏等安全问题。功能介绍1、识别二进制可执行文件中的潜在ROP小工具。2......
  • DeiT-LT:印度科学院提出针对长尾数据的`DeiT`升级模型 | CVPR 2024
    DeiT-LT为ViT在长尾数据集上的应用,通过蒸馏DIST标记引入CNN知识,以及使用分布外图像并重新加权蒸馏损失来增强对尾类的关注。此外,为了减轻过拟合,论文建议用经过SAM训练的CNN教师进行蒸馏,促使所有ViT块中DIST标记学习低秩泛化特征。经过DeiT-LT的训练方案,DIST标记成为尾类的专家,分......
  • 目前针对大模型进行量化的方法概览
    转载自知乎:吃果冻不吐果冻皮近年来,随着Transformer、MOE架构的提出,使得深度学习模型轻松突破上万亿规模参数,从而导致模型变得越来越大,因此,我们需要一些大模型压缩技术来降低模型部署的成本,并提升模型的推理性能。模型压缩主要分为如下几类:剪枝(Pruning)知识蒸馏(Knowledge......
  • canvas调整基点(中心点:x、y坐标所针对的点位)
    在canvas中,可以使用textAlign和textBaseline属性来调整文字的基准点 textAlign属性:用于设置文字的水平对齐方式。start(默认,基准点在文字左端) end(基准点在文字右端) center(基准点在文字中心) left(基准点在文字左端) right(基准点在文字右端)  textBaseline属性:用......
  • RAG知识库之针对长文档的Raptor索引
          在现有的朴素RAG应用中其只是简单的对文档进行分块后存储的向量库中,然后在使用是根据提问问题从查询向量库中查询相识度较高的文档快作为问题上下文提交到LLM让其根据上下文去回答用户所提问的问题。对于小文本可以直接将整个文档作为上下文或使用上篇文章所提到的......
  • 锁撤销阈值达到20次批量重偏向是针对类还是线程?撤销阈值达到20次触发的20是指撤销偏向
    先说答案, 锁的批量重偏向是针对类的,且只能触发一次,撤销阈值20次是指撤销19个对象偏向锁后再来一个对象需要撤销才会触发锁的批量重偏向,实际会撤销19个。测试过程如下:建立spring项目,要有依赖<dependency><groupId>org.openjdk.jol</groupId>......
  • Android.mk语法规则(主要针对C编译)
    参考页面:https://www.jb51.net/program/29533325i.htmhttps://www.cnblogs.com/kn-zheng/p/17005182.htmlAndroid.mk是什么Android.mk是Android工程管理文件,类似于编译文件的说明书,用来向NDK编译系统描述源代码,并将源文件分组为模块(包括静态库、共享库、独立可执行文件)。And......
  • MySQL 如何拥有针对特定主机的单一用户账户
    MySQL如何拥有针对特定主机的单一用户账户?通常,我们会创建用户名相同但主机/IP不同的独立用户账户,如<USER>@<HOST1>,<USER>@<HOST2>....。<USER>@<HOSTn>。然后,给予这些用户相同的授权(权限/角色)和设置(密码、SSL等)。 除了以上的做法,可以创建一个可以从所有主机连接的......
  • Three.js针对.gltf类型建模文件封装记录
    记录Three.js代码组件封装片段,支持定制旋转位置大小配置three.js官方连接:Three.js中文网3D模型文件下载地址:3D模型可视化编辑器完整效果图片封装文件位置:utils文件夹下 依赖安装:"dependencies":{"three":"^0.165.0","three-obj-mtl-loader":"^1.......