Blaster - Multiplayer P127-PXXX: 多种武器

article/2025/6/27 18:34:34

P129_ Rocket Projectiles

P129_1 创建火箭

  • 配置请自行查看.

P129_2 创建火箭发射器

  • 配置请自行查看.

P129_3 初始化弹药

  • 这里添加了一个新的武器类型.

P129_4 禁止重复添加 CharacerOverlay

P130_ Rocket Trails

  • 本节制作了一个奶瓜特效.

P131_Spawn Rocket Trails

  • 如果把拖尾特效直接放在火箭蓝图作为组件,则火箭Destroy时其也会销毁.
  • 本节需要注意的点就是对于产生爆炸的粒子特效,我们在服务端可以让CollisionBox发生碰撞以此来生成特效.但是伤害判断还是在Server上.
  • 还有一点就是为了满足 Rocket 特有的生成特效的时机 , 我们 override了,父类Projectile父类的OnHit , Destroyed()方法 , 但是没有 Call Super的技巧.

P131_1 ProjectileRocket.h

#pragma once#include "CoreMinimal.h"
#include "Weapon/Projectile.h"
#include "ProjectileRocket.generated.h"UCLASS()
class BLASTER_API AProjectileRocket : public AProjectile
{GENERATED_BODY()public:#pragma region SystemAProjectileRocket();virtual void BeginPlay() override;virtual void Destroyed() override;virtual void OnHit(UPrimitiveComponent* OverlappedComponent,AActor* OtherActor,UPrimitiveComponent* OtherComp,FVector NormalImpulse,const FHitResult& SweepResult) override;#pragma endregion#pragma region Componet UPROPERTY(VisibleAnywhere)class UStaticMeshComponent* RocketMesh;#pragma endregion#pragma region TrailUPROPERTY(EditAnywhere)class UNiagaraSystem* TrailSystem;UPROPERTY(EditAnywhere)class UNiagaraComponent* TrailSystemComponent;FTimerHandle DestroyTimer;void DestroyTimerFinished();UPROPERTY(EditAnywhere)float DestroyTime = 3.0f;#pragma endregion#pragma region SoundUPROPERTY(EditAnywhere)class USoundCue* ProjectileLoop;UPROPERTY()class UAudioComponent* ProjectileLoopComponent;UPROPERTY(EditAnywhere)class USoundAttenuation* LoopingSoundAttenuation;#pragma endregion

P131_2 Rocket Movement Component

#include "Weapon/ProjectileRocket.h"
#include "Kismet/GameplayStatics.h"
#include "NiagaraFunctionLibrary.h"
#include "Components/BoxComponent.h"
#include "Sound/SoundCue.h"
#include "NiagaraComponent.h"
#include "NiagaraSystemInstance.h"
#include "Components/AudioComponent.h"#pragma region SystemAProjectileRocket::AProjectileRocket()
{RocketMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("RocketMesh"));RocketMesh->SetupAttachment(GetRootComponent());RocketMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);}void AProjectileRocket::BeginPlay()
{Super::BeginPlay();if (!HasAuthority()) { //Projectile Rocket 现在客户端也可以碰撞了,只不过我们只想在 服务端 处理伤害CollisionBox->OnComponentHit.AddDynamic(this,&AProjectileRocket::OnHit);}if (TrailSystem) {TrailSystemComponent = UNiagaraFunctionLibrary::SpawnSystemAttached(TrailSystem,GetRootComponent(),FName(),GetActorLocation(),GetActorRotation(),EAttachLocation::KeepWorldPosition,false);}if (ProjectileLoop && LoopingSoundAttenuation) {ProjectileLoopComponent = UGameplayStatics::SpawnSoundAttached(ProjectileLoop,GetRootComponent(),FName(),GetActorLocation(),EAttachLocation::KeepWorldPosition,false,1.0f,1.0f,0.0f,LoopingSoundAttenuation,(USoundConcurrency*)nullptr,false //bAutoDestroy);}}void AProjectileRocket::Destroyed()
{}//Server & Client
void AProjectileRocket::OnHit(UPrimitiveComponent* HitComp,AActor* OtherActor,UPrimitiveComponent* OtherComp,FVector NormalImpulse,const FHitResult& SweepResult)
{APawn* FireingPawn = GetInstigator();//只在服务端处理伤害if (FireingPawn && HasAuthority()) {AController* FiringController = FireingPawn->GetController();if (FiringController) {UGameplayStatics::ApplyRadialDamageWithFalloff(this,Damage,			//Base Damage10.0f,			//MinimumDamageGetActorLocation(),		//Origin Location200.0f, //Inner Radius500.0f, // Outer Radius1.0f,  //LinearUDamageType::StaticClass(),	//DamageTypeClassTArray<AActor*>(),	//Ignore Arraythis,			//Damage CauserFiringController //InsitigatorController);}}//Super::OnHit(HitComp, OtherActor, OtherComp, NormalImpulse, SweepResult);GetWorldTimerManager().SetTimer(DestroyTimer,this,&AProjectileRocket::DestroyTimerFinished,DestroyTime);if (ImpactParticles) {UGameplayStatics::SpawnEmitterAtLocation(GetWorld(),ImpactParticles,GetActorTransform());}if (ImpactSound) {UGameplayStatics::PlaySoundAtLocation(this, ImpactSound, GetActorLocation());}if (RocketMesh) {RocketMesh->SetVisibility(false);}if (CollisionBox) {CollisionBox->SetCollisionEnabled(ECollisionEnabled::NoCollision);}if (TrailSystemComponent) {TrailSystemComponent->GetSystemInstance()->Deactivate();}if (ProjectileLoopComponent && ProjectileLoopComponent->IsPlaying()) {ProjectileLoopComponent->Stop();}
}#pragma endregion#pragma region Trail
void AProjectileRocket::DestroyTimerFinished()
{Destroy();
}#pragma endregion

P132_ Rocket Movement Component


http://www.hkcw.cn/article/pibBKdBfAt.shtml

相关文章

基于SpringBoot运动会管理系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

无畏契约 directx runtime修复

无畏契约 directx runtime修复 问题如下 解决办法

端午经济成为消费活力新引擎 民俗体验带动文旅热潮

端午节作为中国首个入选世界非物质文化遗产的传统节日,在今年展现出了多元的文旅消费方式。人们不仅在河湖边观看龙舟竞渡,还在古镇体验民俗技艺、参观文博场馆,享受艺术之美。这些活动不仅展现了中华文化的独特魅力,还成为拉动消费市场的新动力。今年端午假期,“民俗体验…

48岁妻子产子丈夫称孙子比儿子大3岁 28岁女儿喜迎弟弟

6月2日,广东河源一名48岁的再婚女子在怀孕后仅用15分钟就顺利产下孩子。她的28岁女儿对此表示非常高兴,并发文说:“从此多一个人为妈妈保驾护航了。”女子的丈夫提到,他们的孙子比儿子还要大3岁。据此前报道,这名女子发现自己怀孕时已经怀胎7个月,她之前一直以为自己是“…

印尼球员费迪南:目标是连胜中日全取6分,力争直接出线 豪言壮志冲击出线

印尼本土边锋费迪南表示,对于即将到来的18强赛最后两轮比赛,印尼队的目标是连胜中国和日本,全取6分。5月30日是印尼足协主席托希尔的55岁生日,他当时正在巴厘岛参加U23东南亚杯的小组抽签仪式,并与印尼队共进晚餐,庆祝自己和归化队长伊泽斯的生日。托希尔和伊泽斯收到的生…

俄州长宣布奖励向乌无人机投石民众 平民勇阻袭击获赞

俄罗斯伊尔库茨克州州长科布泽夫表示,向乌克兰无人机投掷石块的几名当地男子将获得奖励。此前社交媒体上流传的一段视频显示,几名俄罗斯男子爬上搭载乌克兰无人机的卡车车顶,试图阻止无人机起飞对俄境内发动袭击。俄罗斯国防部通报称,乌克兰当局使用FPV无人机对摩尔曼斯克州…

24岁大学生暗网贩毒3年捞钱超7亿 台大学霸落网

24岁大学生暗网贩毒3年捞钱超7亿 台大学霸落网。据环球网援引台媒报道,近日,美国联邦调查局(FBI)破获暗网毒品交易平台“隐身市场”,而该平台经营者“法老”的真实身份竟是24岁台湾大学资管系学生林睿庠。林睿庠因贩毒资产暴增,3年多其不法所得超过1亿美元(约7.2亿元人民…

嫂子还得多练!塞鸟妻子高铁上感慨中文太难:我不知道“手”中文 高铁学中文挑战大

嫂子还得多练!塞鸟妻子高铁上感慨中文太难:我不知道“手”中文 高铁学中文挑战大!塞尔吉尼奥的妻子社媒晒出在高铁上学中文的照片,并用中葡双语配文:这要求也太高了,我不知道“手”(说)中文责任编辑:0882

【C#】Quartz.NET怎么动态调用方法,并且根据指定时间周期执行,动态配置类何方法以及Cron表达式,有请DeepSeek

&#x1f339;欢迎来到《小5讲堂》&#x1f339; &#x1f339;这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。&#x1f339; &#x1f339;温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01;&#…

58岁女子山里失联6天5夜奇迹生还 救援队地毯式搜寻成功救出

6月1日,温州市黑马救援队发现一名失联6天5夜的老人。当时老人尚有生命体征,已被送往医院进一步救治。这名58岁的老人于5月27日在温州市鹿城区仰义教堂附近的山中失联,家属和救援队多日寻找未果。6月1日上午,黑马救援队接到鹿城区公安分局指挥中心指令后,组织了40余人,携带…

20250602在Ubuntu20.04.6下修改压缩包的日期和时间

rootrootrootroot-X99-Turbo:~$ ll -rwxrwxrwx 1 rootroot rootroot 36247187308 5月 23 10:23 Android13.0地面站.tgz* rootrootrootroot-X99-Turbo:~$ touch 1Android13.0地面站.tgz rootrootrootroot-X99-Turbo:~$ ll -rwxrwxrwx 1 rootroot rootroot 36247187308 6月…

金价再冲上3300美元 贸易局势推动

5月美股表现亮眼,标普500指数上涨6.15%,纳斯达克指数上涨9.56%,道琼斯指数上涨3.94%。尽管市场波动加剧,标普500和纳斯达克仍创下自2023年11月以来最大月度涨幅。特朗普宣布从6月4日起将进口钢铁关税提高至50%。这一消息导致现货黄金周一跳空高开,重新站上3300美元关口。亚…

graphviz, dot,python批量生成,示例1-10

0&#xff09;运行python脚本 import osdir1 "dot1" allfiles os.listdir(dir1) for i in range(len(allfiles)):ff dir1"\\"allfiles[i]file_name, file_extension os.path.splitext(ff)if not ".txt" file_extension.lower():continuecm…

光伏功率预测 | BiLSTM多变量单步光伏功率预测(Matlab完整源码和数据)

光伏功率预测 | BiLSTM多变量单步光伏功率预测&#xff08;Matlab完整源码和数据&#xff09; 目录 光伏功率预测 | BiLSTM多变量单步光伏功率预测&#xff08;Matlab完整源码和数据&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 光伏功率预测 | BiLSTM多变…

云计算数据治理

知识星球&#xff1a;数据书局。打算通过知识星球将这些年积累的知识、经验分享出来&#xff0c;让各位在数据治理、数据分析的路上少走弯路&#xff0c;另外星球也方便动态更新最近的资料&#xff0c;提供各位一起讨论数据的小圈子 1.摘要 云计算可以推动创新和各行业应用的…

「Python教案」字符串格式化操作

课程目标 1&#xff0e;知识目标 能够正确使用%、str.format()以及f-string进行数据格式化。能够分析不同格式化方法的适用场景及优缺点等。能够利用格式化控制符&#xff0c;例如对齐、宽度、精度、进制转换等进行格式化控制。 2&#xff0e;能力目标 能够根据需求选择合适…

空调清洗教程

&#x1f32c;️空调大清洗 流程过于复杂&#xff0c;建议网上找人清洗。如果想自己动手建议两人&#xff0c;可以站高的椅子&#xff08;安全为主&#xff09;。 &#x1f9f0; 工具准备&#xff1a; 螺丝刀螺丝收纳盒手套&#xff08;铝片很锋利&#xff0c;小心被划伤&am…

Docker 与 Harbor 私有仓库:镜像管理与版本控制的完整实践

在容器化大行其道的今天,Docker 镜像作为构建和部署容器化应用的基石,其管理和分发变得尤为关键。虽然 Docker Hub 等公共镜像仓库提供了便利,但在企业级或团队开发环境中,出于安全、效率、合规性和版本控制等考量,搭建一个私有 Docker 镜像仓库已成为不可或缺的一环。 本…

【深入详解】数据在内存中的存储:整数在内存中的存储、大小端字节序和字节序判断、浮点数在内存中的存储

目录 一、整数在内存中的存储 二、大小端字节序和字节序判断 &#xff08;一&#xff09;大小端是什么 &#xff08;二&#xff09;为什么会有大小端 &#xff08;三&#xff09;练习 1、练习(1) 2、练习(2) 3、练习(3) 4、练习(4) 5、练习(5) 6、练习(6) 三、浮点数…

前端八股之Vue

有使用过vue吗&#xff1f;说说你对vue的理解 对比维度详情Web 发展历程石器时代&#xff1a;静态网页&#xff0c;无数据库&#xff0c;后 CGI 技术实现网页与数据库交互&#xff0c;如 1998 年的 Google 文明时代&#xff1a;2005 年左右 ASP、JSP 出现&#xff0c;取代 CGI…