枪口特效
2023年10月16日 2024年1月11日
说明
创建一个发射器NE_LauncherFlash, 两个粒子系统NS_LauncherMuzzle和NS_RiffleMuzzle
发射器的枪口特效较简单. 步枪的射击涉及定时器, 只创建一次粒子系统, 开始射击时, 令其开始并将其渲染, 停止射击时令其暂停, 不再对其进行渲染
创建Niagara粒子发射器
创建文件夹 Content/VFX/Muzzles
-
创建Niagara粒子发射器
-
使用模板
-
选择
Simple Sprite Burst
, 命名为NE_LauncherFlash -
设置纹理
-
使用默认发射器状态: 不循环; 设置时长
-
设置粒子数
-
设置外观
生存时间, 颜色, 聚集方式, 分布, 旋转模式 -
添加属性:
Scale Sprite Size
起点
终点
-
添加属性:
Sprite Rotation Rate
设置Rotation Rate为
Particles > Initial > MaterialRandom
基于NE_LauncherFlash创建发射器使用的Niagara粒子系统资产
右键NE_LauncherFlash, 命名为NS_LauncherMuzzle
设置不变, 只播放一次
基于NE_LauncherFlash创建步枪使用的Niagara粒子系统资产
命名为NS_RifleMuzzle
循环播放, 设置时长
添加属性: Spawn Rate
设置为90
设置颜色
优化榴弹冲击特效
NS_ProjectileImpact
设置粒子数
设置分布
枪口特效
武器基类: 在枪口生成特效, 返回Niagara组件
添加属性: 保存特效类型
ShootThemUp: Weapon/STUBaseWeapon.h
protected
1class UNiagaraSystem; 2 3UPROPERTY(EDitDefaultsOnly, BlueprintReadWrite) 4UNiagaraSystem *MuzzleFX;
添加接口: 在枪口生成特效, 播放完自动销毁, 返回Niagara组件
ShootThemUp: Weapon/STUBaseWeapon.h
protected
1class UNiagaraComponent; 2 3UNiagaraComponent *SpawnMuzzleFX();
ShootThemUp: Weapon/STUBaseWeapon.cpp
1#include "NiagaraFunctionLibrary.h" 2#include "NiagaraComponent.h" 3 4UNiagaraComponent *ASTUBaseWeapon::SpawnMuzzleFX() 5{ 6 return UNiagaraFunctionLibrary::SpawnSystemAttached(MuzzleFX, // 7 WeaponMeshComponent, // 8 MuzzleSocketName, // 9 FVector::ZeroVector, // 10 FRotator::ZeroRotator, // 11 EAttachLocation::SnapToTarget,// 12 true); 13}
-
UNiagaraFunctionLibrary::SpawnSystemAttached
Niagaram粒子系统的变换与上级组件变换保持一致
1static UNiagaraComponent* SpawnSystemAttached(UNiagaraSystem* SystemTemplate, 2 USceneComponent* AttachToComponent, 3 FName AttachPointName, 4 FVector Location, 5 FRotator Rotation, 6 EAttachLocation::Type LocationType, 7 bool bAutoDestroy, 8 bool bAutoActivate = true, 9 ENCPoolMethod PoolingMethod = ENCPoolMethod::None, 10 bool bPreCullCheck = true);
- SystemTemplate 粒子特效类型 AttachToComponent 上级组件 AttachPointName 挂载点 Location 位置 Rotation 方向向量 LocationType 挂载方式 bAutoDestroy 特效若没有循环, 结束后销毁
榴弹发射器
射击后生成枪口特效
ShootThemUp: Weapon/STULauncherWeapon.cpp
1// MakeShot 2SpawnMuzzleFX();
步枪
添加属性: 保存Niagara组件
ShootThemUp: Weapon/STURifleWeapon.h
private
1class UNiagaraComponent; 2 3UPROPERTY() 4UNiagaraComponent *MuzzleFXComponent;
添加接口: 根据标志位设置特效
ShootThemUp: Weapon/STURifleWeapon.h
private
1void SetMuzzleFXVisibility(bool Visible);
ShootThemUp: Weapon/STURifleWeapon.cpp
1#include "NiagaraComponent.h" 2void ASTURifleWeapon::SetMuzzleFXVisibility(bool Visible) 3{ 4 if (MuzzleFXComponent) 5 { 6 MuzzleFXComponent->SetPaused(!Visible); 7 MuzzleFXComponent->SetVisibility(Visible, true); 8 } 9}
-
SetPaused
设置粒子系统暂停或继续, 即, 与Tick函数有关
-
SetVisibility
设置是否渲染粒子系统
第二个参数影响子节点的渲染, 此处设为true或false无影响
添加接口: 在枪口生成特效, 设置特效可见
ShootThemUp: Weapon/STURifleWeapon.h
private
1void InitMuzzleFX();
ShootThemUp: Weapon/STURifleWeapon.cpp
1void ASTURifleWeapon::InitMuzzleFX() 2{ 3 if (!MuzzleFXComponent) 4 { 5 MuzzleFXComponent = SpawnMuzzleFX(); 6 } 7 SetMuzzleFXVisibility(true); 8}
射击时生成特效或设置特效可见
1// FireStart 2InitMuzzleFX();
停止射击时设置特效不可见
1// FireStop 2SetMuzzleFXVisibility(false);
查看
设置步枪枪口动画
设置发射器枪口动画
步枪射击时移动, 有神龙甩尾的效果…